MFC编辑框关联的变量怎么用UpdateData(FALSE)无法直接写到编辑框中啊,而是需要手动点编辑框
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC编辑框关联的变量怎么用UpdateData(FALSE)无法直接写到编辑框中啊,而是需要手动点编辑框相关的知识,希望对你有一定的参考价值。
手动点编辑框,编辑框中的内容才会改变(编辑框没有设响应函数) 这个是子对话框,里面所有编辑框都有这样的问题 我后来弄了个简单的编辑框 关联整型变量m_a,设个按钮,里面就放两行代码 m_a=9;
UpdateData(FALSE);
这样还是有问题,这个编辑框还是要手动点 才会变成9
UpdateData(FALSE);//将读取到的数据显示在编辑框中
每个编辑框要关联一个变量,你直接操作变量就行。
比如:
Edit1 关联 m_strNum1
Edit2 关联 m_strNum2
Edit3 关联 m_strNum3
你再设置一个按钮,然后在上面添加事件,写如下代码:
UpdateData(TURE);//从编辑框中读取数据
m_strNum3 = m_strNum1 + m_strNum2;
UpdateData(FALSE);//将读取到的数据显示在编辑框中
然后:
你在编辑框1中输入2
编辑框2中输入3
点击 按钮,编辑框3中就会显示5
追问这个我知道啊,关键是用了这个UPDATEDATE(FASLE)编辑框还是无法改变啊
追答你是说输入数字后 不点击其它的编辑框就不会改变?
追问就是在程序里面,关联变量已经改变了,但编辑框不变,要点击编辑框
追答你一个编辑框还能关联几个变量? 你的关联变量变了是什么意思?
追问就是关联一个变量啊,在程序里面,改了这个变量的值,但是要点击编辑框才能显示后来改的这个数
参考技术A 因为你手动点击,会引发CEdit重绘,所以内容改变了,当你设置字符串时,请试试UpdateData(TRUE)或者是Invalidate这些重绘函数。它们会让CEdit进行重绘。追问我关联变量是INT也会有影响吗? 我是我问题在于关联变量已经改变,但无法及时的显示出来,而是要点编辑框
追答我可能没说明白,但你关联好,并且赋值后,就调用UpdateData(TRUE)或者Invalidate这些函数让编辑框重绘,这样就能及时显示了。
追问UpdateData(TRUE)??? 这个不就改变了关联变量的值了吗,使它变成原编辑框中的数了吗?
追答那你用RedrawWindow试试,设置完值后,重画编辑框。
本回答被提问者采纳 参考技术B 应该是VC或系统问题,如果其他程序没有问题,应该是vc问题。基于VC的MFC界面开发
UpdateData(TRUE);//将输入数据赋给文本框变量。
UpdateData(FALSE);//将内容显示在文本框中
AfxMessageBox("演示弹窗");
当使用弹窗的时候会阻塞进程。
进阶(未实现):VC++6.0可视化窗口怎么填加图片
本例是基于C语言实现的Windows socket的编程。
注意,在新建时不要勾选“Windows Socket”,因为用到了<winsock2.h>,勾选后会报错,说有一个结构体被定义了两次:
(这前面是你的VC安装路径)includewinsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition
参考代码如下:
// 333Dlg.cpp : implementation file
//客户端
#include "stdafx.h"
#include "333.h"
#include "333Dlg.h"
#include <stdlib.h>
#include<Winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#define BUFFER_SIZE 1024
#define MY_PORT 3434
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMy333Dlg dialog
CMy333Dlg::CMy333Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CMy333Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMy333Dlg)
m = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMy333Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMy333Dlg)
DDX_Text(pDX, IDC_EDIT1, m);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMy333Dlg, CDialog)
//{{AFX_MSG_MAP(CMy333Dlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMy333Dlg message handlers
BOOL CMy333Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMy333Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMy333Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMy333Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
SOCKET conn_sock;
struct sockaddr_in client_addr;
//WSA初始化
WSADATA wsadata;
WSAStartup(MAKEWORD(1,1),&wsadata);
//配置connect
conn_sock = socket(AF_INET,SOCK_STREAM,0);
bind(conn_sock,(struct sockaddr*)&client_addr,sizeof(struct sockaddr));
//配置server addr
client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(MY_PORT);
client_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
//链接
connect(conn_sock,(struct sockaddr *)&client_addr,sizeof(struct sockaddr));
//接收
char rc[100] = "";
recv(conn_sock,rc,sizeof(rc),0);
//printf("From Server : %s
",rc);
AfxMessageBox("连接成功!");
//输入路径
//printf("Please input path:
");
//char path[100];
//scanf("%s",&path);
//发送路径
//send(conn_sock,path,strlen(path),0);
//打开文件,准备写入
FILE * fp = fopen(m, "rt");
if(NULL == fp)
{
//printf("File: %s Can Not Open To Write
", path);
AfxMessageBox("打开文件失败!");
system("pause");
exit(1);
}
else
{
char buffer[BUFFER_SIZE];
memset(buffer, 0, BUFFER_SIZE);
int length = 0;
//发送文件内容,直到读不到文件
while((length = fread(buffer, sizeof(char), BUFFER_SIZE, fp)) > 0)
{
if (send(conn_sock, buffer, length, 0) < 0)//向服务端发送
{
//printf("Send File: %s Failed
", path);
AfxMessageBox("发送失败!");
break;
}
memset(buffer, 0, BUFFER_SIZE);
}
//printf("File: %s Transfer Successful!
", path);
AfxMessageBox("发送成功!");
}
fclose(fp); //关闭文件
closesocket(conn_sock);
WSACleanup();
}
void CMy333Dlg::OnChangeEdit1()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData(TRUE);//将输入数据赋给文本框变量。
UpdateData(FALSE);//将内容显示在文本框中
}
// 111Dlg.cpp : implementation file
//服务器端
#include "stdafx.h"
#include "111.h"
#include "111Dlg.h"
#include <Winsock2.h>
#pragma comment (lib,"ws2_32.lib")
#define BUFFER_SIZE 1024
#define MY_PORT 3434
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMy111Dlg dialog
CMy111Dlg::CMy111Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CMy111Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMy111Dlg)
m = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMy111Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMy111Dlg)
DDX_Text(pDX, IDC_EDIT1, m);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMy111Dlg, CDialog)
//{{AFX_MSG_MAP(CMy111Dlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnStart)
ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMy111Dlg message handlers
BOOL CMy111Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMy111Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMy111Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMy111Dlg::OnStart()
{
// TODO: Add your control notification handler code here
//WSA初始化
WSADATA wsadata;
char *buffer = "Welcome ! Server connected.";//字符串
struct sockaddr_in server_addr;
SOCKET listen_socket;
WSAStartup(MAKEWORD(1,1),&wsadata);
//配置server addr
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(MY_PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
//配置listener
listen_socket = socket(AF_INET,SOCK_STREAM,0);
bind(listen_socket,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));
int flag = 1;
while (flag)
{
//开始监听
listen(listen_socket,5);
int dummy = sizeof(SOCKADDR);
//printf("Listening to client...
");
AfxMessageBox("等待客户端连接......");
//建立连接
SOCKET new_socket = accept(listen_socket,NULL,&dummy);
//printf("Client connected!
");
AfxMessageBox("连接成功!准备从客户端接收文件......");
//发送信息
send(new_socket,buffer,strlen(buffer),0);
char rc[100] = "";
//recv(new_socket,rc,sizeof(rc),0);
//printf("File name from Client : %s
",rc);
//char path[100];
char buf[999];
//printf("Please set a path to save file:
");
FILE * fp = fopen(m, "wt");//以写入的方式打开文件
if (NULL == fp)
{
//printf("File: %s Not Found
", path);
AfxMessageBox("写入文件失败!");
}
else
{
memset(buf, 0, BUFFER_SIZE);
unsigned int length = 0;
//接受到客户端发来的文件数据
while ((length = recv(new_socket, buf, BUFFER_SIZE, 0)) > 0)
{
//把发来的数据写入到文件中
if (fwrite(buf, sizeof(char), length, fp) < length)
{
//printf("File: %s Write Failed
", path);
AfxMessageBox("接收失败!");
break;
}
memset(buf, 0, BUFFER_SIZE);
}
//printf("Receive File: %s From Server Successful!
", path);
AfxMessageBox("接收成功!");
flag = 0;
}
fclose(fp); //关闭文件
closesocket(new_socket);
}
closesocket(listen_socket);
WSACleanup();
}
void CMy111Dlg::OnChangeEdit1()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData(TRUE);//将输入数据赋给文本框变量。
UpdateData(FALSE);//将内容显示在文本框中
}
以上是关于MFC编辑框关联的变量怎么用UpdateData(FALSE)无法直接写到编辑框中啊,而是需要手动点编辑框的主要内容,如果未能解决你的问题,请参考以下文章
怎么用MFC,将复选框选中的文字在编辑框中显示出来,例如下面的图片,就是说将选中的课程在编辑框中显示出