日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > [ATL/WTL]_[初級]_[Win32窗口自定義消息處理過程]

[ATL/WTL]_[初級]_[Win32窗口自定義消息處理過程]

來源:程序員人生   發布時間:2016-07-20 08:16:24 閱讀次數:3772次

場景

  1. 有時候我們需要單獨對某個窗口消息進行攔截,比如CEdit響應回車, 這時候候就需要攔截窗口處理進程了. 固然MFC的界面可以重載:
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg){

但是WTL的CEdit其實不支持這類方式,WTL如果想在 PreTranslateMessage 里攔截消息,必須繼承 CMessageFilter 后還要把這個控件注冊到消息循環里才行,也就是必須寫子類 或從父窗口攔截這個CEdit的消息.

CMessageLoop* pLoop = _Module.GetMessageLoop(); ATLASSERT(pLoop != NULL); pLoop->AddMessageFilter(this);

方案

  1. 通過使用 SetWindowLong來改變窗口處理進程來處理相干的消息,其他消息使用原進程繼續處理.
static WNDPROC OldWndProc = NULL; static UiPreviewListDialog* gDialog = NULL; static LRESULT CALLBACK NewEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) // 該對話框新的窗口回調函數,過濾WM_KEYDOWN消息。 { switch(message) { case WM_GETDLGCODE: { return (DLGC_WANTALLKEYS | CallWindowProc(OldWndProc, hWnd, message, wParam, lParam)); // 注意這里,否則沒有辦法捕獲Tab/方向鍵 } case WM_KEYDOWN: { if(wParam == VK_RETURN) { std::cout << "Enter: " << std::endl; BOOL handle; gDialog->OnSearch(message,wParam,hWnd,handle); } } break; default: break; } return CallWindowProc(OldWndProc, hWnd, message, wParam, lParam); } gDialog = this; OldWndProc = (WNDPROC)edit_.SetWindowLong(GWL_WNDPROC, (LONG)NewEditProc);

參考:
CEdit中對回車鍵的響應
SetWindowLong function
CallWindowProc

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久人人爽人人爽人人片av不 | 美日韩一区 | 黄色片网站免费在线观看 | 黄色大片网站 | 青青草网站 | 久久久久久免费 | 国产精品免费一区二区 | 国产精品毛片va一区二区三区 | 91精品久久久久久久91蜜桃 | 成人亚洲一区 | 日韩av线 | 国产精品久久久久久久久久久久久久 | 亚洲88| 麻豆视频在线 | 久久免费国产 | 国内成人在线 | 国产第91页 | 中文字幕在线观看日韩 | 国产色女 | 久久久蜜桃 | 九九热在线免费观看 | 成人免费网站在线观看 | aa视频在线观看 | 国产精品理人伦一区二区三区 | 精品国产乱码一区二区三区 | 亚洲欧美日韩国产 | 日韩av在线免费 | 久久久久无码国产精品一区 | 99久久精品国产免费看不卡 | 激情视频网 | 久久久二区 | 国产精品久久久久久亚洲调教 | 色av网站 | www.亚洲色图.com | 国产午夜精品一区二区三区 | 国产一区二区毛片 | 九九热免费在线观看 | 99精品一区二区 | 91.成人天堂一区 | 国产精品久久久久9999 | 国产精品视频一二区 |