现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

MFC不能用UpdateData的解决方法

2012-07-11 22:10 工业·编程 ⁄ 共 1833字 ⁄ 字号 暂无评论

1.定义一个消息 #define WM_UPDATE_MESSAGE (WM_USER+200)

//为了防止用户定义的消息ID与系统的消息ID冲突,MS(Microsoft)定义了一个宏WM_USER,小于WM_USER的ID被系统使用,大于WM_USER的ID被用户使用

2.定义消息映射

BEGIN_MESSAGE_MAP(CCServerDlg, CDialog)                  //CCServerDlg为对应的主窗口程序
//{{AFX_MSG_MAP(CCServerDlg)
...
ON_MESSAGE(WM_UPDATE_MESSAGE, OnUpdateMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

3. 定义消息处理函数

// Generated message map functions
//{{AFX_MSG(CCServerDlg)

...
afx_msg LRESULT OnUpdateMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

4. 完成函数内容,只需调用UpdateData()即可

LRESULT CXXXDlg::OnUpdateMessage(WPARAM wParam, LPARAM lParam)
{
UpdateData(FALSE);//或者UpdateData(TURE)
return 0;
}

5.线程中的调用

UINT CXXXDlg::ClientThread(LPVOID lpParam)
{

CXXXDlg *pt=(CCServerDlg*)CWnd::FromHandle(((CCServerDlg*)lpParam)->m_hWnd);//get the handle topost message

pt->PostMessage(WM_UPDATE_MESSAGE,0,0);//OK - UpdateDate

//message sended to "pt"

...

}

6.程序中调用

// CWinThread* pThread;
// static UINT ClientThread(LPVOID lpParm);

void CCServerDlg::OnSStart()
{

...

pThread=AfxBeginThread(ClientThread,this);

...

}

///////////////////////////例子////////////////////////

1、

#define WM_UPDATE_MESSAGE (WM_USER+200)
2、

BEGIN_MESSAGE_MAP(CPMAgentManageDlg, CDialog)
//{{AFX_MSG_MAP(CPMAgentManageDlg)
ON_MESSAGE(WM_UPDATE_MESSAGE, OnUpdateMessage) //////////////////加的
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3、

在PMAgentManageDlg.h文件中
// Generated message map functions
//{{AFX_MSG(CPMAgentManageDlg)
afx_msg LRESULT OnUpdateMessage(WPARAM wParam, LPARAM lParam);///////////加的
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
4、

在.cpp中完成函数内容
LRESULT CPMAgentManageDlg::OnUpdateMessage(WPARAM wParam, LPARAM lParam)
{
UpdateData(TRUE);
return 0;
}
5、

在线程中要用到updatedata的地方添加
CPMAgentManageDlg *pt=(CPMAgentManageDlg*)CWnd::FromHandle(((CPMAgentManageDlg*)lParam)->m_hWnd);//
   pt->PostMessage(WM_UPDATE_MESSAGE,0,0);

现在就可以直接使用UpdateData了

Updatedata(TRUE) == 将控件的值赋值给成员变量;                                   

Updatedata(FALSE) == 将成员变量的值赋值给控件

给我留言

留言无头像?