/** * CWndProc オブジェクトの Windows プロシージャ (WindowProc) が用意されています * @param[in] nMsg 処理される Windows メッセージを指定します * @param[in] wParam メッセージの処理で使う付加情報を提供します。このパラメータの値はメッセージに依存します * @param[in] lParam メッセージの処理で使う付加情報を提供します。このパラメータの値はメッセージに依存します * @return メッセージに依存する値を返します */ LRESULT CWndProc::WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam) { if (nMsg == WM_COMMAND) { if (OnCommand(wParam, lParam)) { return 0; } } else if (nMsg == WM_NOTIFY) { NMHDR* pNMHDR = reinterpret_cast<NMHDR*>(lParam); if (pNMHDR->hwndFrom != NULL) { LRESULT lResult = 0; if (OnNotify(wParam, lParam, &lResult)) { return lResult; } } } else if (nMsg == WM_NCDESTROY) { OnNcDestroy(wParam, lParam); return 0; } return DefWindowProc(nMsg, wParam, lParam); }
LRESULT CALLBACK Slider_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { Slider_Info * const pInfo = GetInfo(hwnd); switch (uMsg) { case WM_CREATE: return OnCreate(hwnd); case WM_PAINT: return OnPaint(hwnd, pInfo); case WM_NCDESTROY: return OnNcDestroy(hwnd, pInfo); case WM_LBUTTONDOWN: return OnLButtonDown(hwnd, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), pInfo); case WM_LBUTTONUP: return OnLButtonUp(hwnd, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), pInfo); case WM_MOUSEMOVE: return OnMouseMove(hwnd, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), pInfo); case WM_ENABLE: if (wParam == FALSE) // Window is disabled. Stop tracking. { return OnReleaseSlider(hwnd, pInfo); } break; case WM_CAPTURECHANGED: // The window lost focus while the slider was tracking the mouse OR // the slider released the mouse capture itself. return OnReleaseSlider(hwnd, pInfo); // Custom messages case WM_SLIDER_SET_THUMB_BITMAP: return OnSetThumbBitmap(hwnd, (WORD)wParam, pInfo); case WM_SLIDER_SET_BACKGROUND: return OnSetBackground(hwnd, (HBRUSH)wParam, pInfo); case WM_SLIDER_SET_MIN_MAX: return OnSetMinMax(hwnd, (LONG)wParam, (LONG)lParam, pInfo); case WM_SLIDER_SET_POSITION: return OnSetPosition(hwnd, (LONG)wParam, pInfo); case WM_SLIDER_GET_POSITION: return OnGetPosition(hwnd, pInfo); default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; };
LRESULT RingStatusBar::RingdowProc(HWND hWnd,RINGPARAMS param) { switch(param.uMsg) { case SB_SIMPLE: //for MenuHelp if(m_pane && (m_pane->m_uStyle & SBPS_STRETCH)) { //如果第一格是不定长,则为显示菜单帮助,此时需要检测是否屏蔽该消息 //该处理是为做出类似VC状态栏的效果,即前面显示帮助,后面显示状态格 if(param.wParam && param.lParam == 0) return 0;//系统发送的消息,屏蔽 } return CallWindowProc(m_DefProc,m_hWnd,SB_SIMPLE,param.wParam,0); case SB_SETTEXTA: case SB_SETTEXTW: //Win2000内部是UNICODE版本,因此此处两个都要判断 if((param.wParam & 0xFF) == 0xFF) { //MenuHelp,系统发送的消息 //如果第一格是不定长,则为显示菜单帮助,此时需要在第一格显示菜单帮助, //保持后面的状态格以做出类似VC状态栏的效果 if(m_pane && (m_pane->m_uStyle & SBPS_STRETCH) && !IsSimple()) { if(CallWindowProc(m_DefProc,m_hWnd,param.uMsg,SBT_NOBORDERS,param.lParam)) { InvalidateRect(m_hWnd,NULL,TRUE); return TRUE; } else return FALSE; } } return CallWindowProc(m_DefProc,m_hWnd,param.uMsg,param.wParam,param.lParam); case SB_SETPARTS: if(CallWindowProc(m_DefProc,m_hWnd,SB_SETPARTS,param.wParam,param.lParam)) m_nPartCount = param.wParam; return (BOOL)m_nPartCount; case WM_COMMAND: return SendMessage(m_parent->Handle(),param.uMsg,param.wParam,param.lParam); case WM_SIZE: UpdateAllParts(); InvalidateRect(m_hWnd,NULL,TRUE); return 0; case WM_NCDESTROY: CallWindowProc(m_DefProc,m_hWnd,param.uMsg,param.wParam,param.lParam); FreeAllPart(); OnNcDestroy(); return 0; } return DefaultProc(param); }
/** * CWndProc オブジェクトの Windows プロシージャ (WindowProc) が用意されています * @param[in] nMsg 処理される Windows メッセージを指定します * @param[in] wParam メッセージの処理で使う付加情報を提供します。このパラメータの値はメッセージに依存します * @param[in] lParam メッセージの処理で使う付加情報を提供します。このパラメータの値はメッセージに依存します * @return メッセージに依存する値を返します */ LRESULT CWndProc::WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam) { if (nMsg == WM_COMMAND) { if (OnCommand(wParam, lParam)) { return 0; } } if (nMsg == WM_NCDESTROY) { OnNcDestroy(wParam, lParam); return 0; } return DefWindowProc(nMsg, wParam, lParam); }
//--------------------------------------------------------------------------- // This is the instance specific method used to process messages. The // DialogProc delegates this responsibility to each instance of the class. // BOOL CSimpleDialog::ProcessMessage ( HWND hDlg, //[in] Handle to dialog box UINT uMsg, //[in] Message WPARAM wParam, //[in] First message parameter LPARAM lParam //[in] Second message parameter ) { LRESULT lResult = 0; switch (uMsg) { case WM_INITDIALOG: lResult = OnInitDialog(hDlg, wParam, lParam); break; case WM_DESTROY: lResult = OnDestroy(hDlg, wParam, lParam); break; case WM_NCDESTROY: lResult = OnNcDestroy(hDlg, wParam, lParam); break; case WM_CLOSE: lResult = OnClose(hDlg, wParam, lParam); break; case WM_COMMAND: switch (wParam) { case IDOK: lResult = OnOK(hDlg, wParam, lParam); break; case IDCANCEL: lResult = OnCancel(hDlg, wParam, lParam); break; default: break; } default: break; } return(BOOL)lResult; }
INT_PTR CMessageForwarder::ForwardMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { m_hwnd = hwnd; m_uMsg = uMsg; m_wParam = wParam; m_lParam = lParam; /* Private message? */ if(uMsg > WM_APP && uMsg < 0xBFFF) { return OnPrivateMessage(uMsg,wParam,lParam); } switch(uMsg) { case WM_INITDIALOG: return OnInitDialog(); break; case WM_CTLCOLORSTATIC: return OnCtlColorStatic(reinterpret_cast<HWND>(lParam), reinterpret_cast<HDC>(wParam)); break; case WM_CTLCOLOREDIT: return OnCtlColorEdit(reinterpret_cast<HWND>(lParam), reinterpret_cast<HDC>(wParam)); break; case WM_HSCROLL: return OnHScroll(reinterpret_cast<HWND>(lParam)); break; case WM_APPCOMMAND: return OnAppCommand(reinterpret_cast<HWND>(wParam), GET_APPCOMMAND_LPARAM(lParam), GET_DEVICE_LPARAM(lParam), GET_KEYSTATE_LPARAM(lParam)); break; case WM_TIMER: return OnTimer(static_cast<int>(wParam)); break; case WM_MBUTTONUP: return OnMButtonUp(&MAKEPOINTS(lParam)); break; case WM_COMMAND: return OnCommand(wParam,lParam); break; case WM_NOTIFY: return OnNotify(reinterpret_cast<LPNMHDR>(lParam)); break; case WM_GETMINMAXINFO: return OnGetMinMaxInfo(reinterpret_cast<LPMINMAXINFO>(lParam)); break; case WM_SIZE: return OnSize(static_cast<int>(wParam), LOWORD(lParam),HIWORD(lParam)); break; case WM_CLOSE: return OnClose(); break; case WM_DESTROY: return OnDestroy(); break; case WM_NCDESTROY: return OnNcDestroy(); break; case EM_SETSEL: OnEMSetSel(wParam,lParam); break; } return GetDefaultReturnValue(hwnd,uMsg,wParam,lParam); }