发送Windows消息实例

来源:互联网 发布:网络大v都有谁 编辑:IT博客网 时间:2019/07/20 17:09

1、利用API函数SendMessage能以同步的方式向目标窗体发送一条消息,然后等待目标窗体处理过程处理此消息。

2、利用API函数PostMessage能以异步方式向目标窗体投递一条消息,消息投递出去后,函数立即返回。

3、PostMessage和SendMessage返回值是BOOL类型,代表消息是否发送成功。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

1、新建基于对话框的MFC工程SendMsg ;

2、在主对话框上添加一个Picture控件,ID为IDC_CAP,type属性改为Icon , Image属性设置为IDR_MAINFRAME;

3、在主对话框上添加三个文本框,ID为IDC_EDT_HWND、IDC_EDT_CLASS、 IDC_EDT_TEXT

4、添加两个按钮,ID为IDC_BTN_SETTEXT、IDC_BTN_CLOSE;

//HCURSOR m_hCursor;///鼠标拖动时的光标BOOL m_bCapturing;///是否处于捕获中RECT m_rtCtrl;///拖动控件的位置和大小HWND m_hwndDest;///目标窗体的句柄

///OnInitDialog中//加载拖动光标m_hCursor = LoadCursor(NULL ,IDC_SIZEALL);///获取拖动控件的位置和大小GetDlgItem(IDC_CAP)->GetWindowRect(&m_rtCtrl);

void CSendMsgDlg::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call default///判断鼠标是否在IDC_CAP上,如果是,则设置捕获鼠标if(point.x >= m_rtCtrl.left && point.x <= m_rtCtrl.right || point.y >= m_rtCtrl.top && point.y <= m_rtCtrl.bottom ){m_bCapturing = true;SetCapture();SetCursor(m_hCursor);}CDialog::OnLButtonDown(nFlags, point);}void CSendMsgDlg::OnLButtonUp(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call default///鼠标左键松开,如果处于捕获状态则做相应的处理if(m_bCapturing){///恢复状态ReleaseCapture();m_bCapturing = false;///取得当前鼠标位置的窗体句柄POINT pt = point;ClientToScreen(&pt);//WindowFromPoint function retrieves a handle to the window that contains the specified pointm_hwndDest = ::WindowFromPoint(pt);///显示句柄TCHAR szBuf[MAX_PATH] = {0};_stprintf(szBuf, _T("0x%.8X") , m_hwndDest);SetDlgItemText(IDC_EDT_HWND , szBuf);//取得并显示类名GetClassName(m_hwndDest ,szBuf ,MAX_PATH);SetDlgItemText(IDC_EDT_CLASS,szBuf);///取得并显示文本::SendMessage(m_hwndDest ,WM_GETTEXT ,MAX_PATH ,(LPARAM)szBuf);SetDlgItemText(IDC_EDT_TEXT,szBuf);}CDialog::OnLButtonUp(nFlags, point);}void CSendMsgDlg::OnBtnSettext() {// TODO: Add your control notification handler code here//设置目标窗体的文本CString str;GetDlgItemText(IDC_EDT_TEXT,str);::SendMessage(m_hwndDest , WM_SETTEXT , 0 , (LPARAM)(LPCTSTR)str);}void CSendMsgDlg::OnBtnClose() {// TODO: Add your control notification handler code here///关闭目标窗口::SendMessage(m_hwndDest , WM_CLOSE ,0 , 0);}





原创粉丝点击