LRESULT CSkinWin::WindowProc(UINT msg, WPARAM wp, LPARAM lp) { if ( !IsWindow(m_hWnd) ) return 0; if ( !m_bInit ) return Default(); switch ( msg ) { case WM_SHOWWINDOW: //call setwindowpos to force OnNcCalcSize when hWnd is a dialog if ( wp ) SetWindowPos( m_hWnd, 0, 0, 0, 400, 400, SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED ); Default(); return 0; break; //case WM_ERASEBKGND: case WM_INITMENUPOPUP: Default(); return 0; // return OnEraseBkgnd(CDC::FromHandle((HDC)wp) ); /* case WM_INITMENU: //a hack, when popup sysmenu, redraw title bar HMENU h; h = (HMENU)wp; int c; h = GetSubMenu(h, 0); c = GetMenuItemID( h, 0 ); if ( c == SC_RESTORE ) { CRect r; GetClientRect( m_hWnd, r ); OnNcPaint(0); r.bottom = GetSystemMetrics(SM_CYCAPTION); InvalidateRect( m_hWnd, r, TRUE ); UpdateWindow( m_hWnd ); } Default(); return 0; */ case WM_SYSCOMMAND: OnSysCommand( wp, lp ); return 0; case WM_SETTEXT: return OnSetText( wp, lp ); case WM_NCPAINT: OnNcPaint( (HRGN)wp ); return 0; case WM_NCCALCSIZE: OnNcCalcSize( (BOOL)wp, (NCCALCSIZE_PARAMS *)lp ); return 0; case WM_SIZE: OnSize( wp, LOWORD(lp), HIWORD(lp) ); return 0; case WM_NCACTIVATE: return OnNcActivate( (BOOL)wp ); case WM_NCHITTEST: return OnNcHitTest(CPoint(LOWORD(lp), HIWORD(lp))); case WM_NCLBUTTONUP: OnNcLButtonUp(wp, CPoint(LOWORD(lp), HIWORD(lp))); return 0; case WM_NCLBUTTONDOWN: OnNcLButtonDown(wp, CPoint(LOWORD(lp), HIWORD(lp))); return 0; /* case WM_NCLBUTTONDBLCLK: OnNcLButtonDblClk(wp, CPoint(LOWORD(lp), HIWORD(lp))); return 0;*///liub_modify (去除双击弹出面板的响应事件) case WM_NCRBUTTONUP: OnNcRButtonUp(wp, CPoint(LOWORD(lp), HIWORD(lp))); return 0; case WM_NCRBUTTONDOWN: OnNcRButtonDown(wp, CPoint(LOWORD(lp), HIWORD(lp))); return 0; case WM_NCMOUSEMOVE: OnNcMouseMove( wp,CPoint(LOWORD(lp), HIWORD(lp))); return 0; case WM_GETMINMAXINFO: OnGetMinMaxInfo( (MINMAXINFO *)lp ); return 0; case WM_WINDOWPOSCHANGING: OnWindowPosChanging((WINDOWPOS *)lp); return 0; case WM_SIZING: OnSizing( wp, (LPRECT)lp ); return 0; case WM_ACTIVATE: OnActivate( wp, CWnd::FromHandle((HWND)lp), 0 ); return 0; case WM_COMMAND: if ( !HandleSysCommand( wp, lp ) ) Default(); return 0; #if 1 // @@ case WM_SETCURSOR: if (OnHitTestSetCursor(LOWORD(lp))) OnNcPaint(0); else Default(); return 0; #endif default: return Default(); } }
DWORD Window::WndProc( UINT message, WPARAM wParam, LPARAM lParam ) { switch (message) { case WM_CLOSE: OnClose(); return 0; case WM_DESTROY: OnDestroy(); return 0; case WM_PAINT: PAINTSTRUCT paint; BeginPaint(GetHWND(), &paint); OnPaint(paint.hdc, paint.rcPaint); EndPaint(GetHWND(), &paint); return 0; case WM_MOVE: case WM_SIZE: UpdateRect(); RectChanged(); break; case WM_TIMER: if (OnTimer()) return 0; break; case WM_HSCROLL: if (OnHScroll((int)LOWORD(wParam), (short int) HIWORD(wParam), (HWND)lParam)) return 0; break; case WM_VSCROLL: if (OnVScroll((int)LOWORD(wParam), (short int) HIWORD(wParam), (HWND)lParam)) return 0; break; case WM_COMMAND: if (OnCommand(wParam, lParam)) return 0; break; case WM_SYSCOMMAND: if (OnSysCommand(wParam & 0xFFF0, MakePoint(lParam))) return 0; break; case WM_ACTIVATE: if (OnActivate(LOWORD(wParam), HIWORD(wParam) != 0)) return 0; break; case WM_ACTIVATEAPP: if (OnActivateApp(wParam != 0)) return 0; break; case WM_CHAR: { KeyState ks; ks.vk = wParam; ks.bShift = (GetKeyState(VK_SHIFT) & 0x8000) != 0; ks.bControl = (GetKeyState(VK_CONTROL) & 0x8000) != 0; ks.countRepeat = LOWORD(lParam); return !OnChar(ks); } break; case WM_KEYDOWN: case WM_SYSKEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: { KeyState ks; ks.vk = wParam; ks.bShift = (GetKeyState(VK_SHIFT) & 0x8000) != 0; ks.bControl = (GetKeyState(VK_CONTROL) & 0x8000) != 0; ks.bAlt = (message == WM_SYSKEYUP || message == WM_SYSKEYDOWN) && (lParam & (1 << 29)); // See help for WM_SYSKEYDOWN ks.bDown = (message == WM_KEYDOWN || message == WM_SYSKEYDOWN); ks.countRepeat = LOWORD(lParam); return !OnKey(ks); } break; case WM_MOUSEWHEEL: //imago 8/13/09 case WM_XBUTTONDOWN: case WM_XBUTTONUP: case WM_MOUSEHOVER: // imago --^ case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_MBUTTONDOWN: case WM_LBUTTONUP: case WM_RBUTTONUP: case WM_MBUTTONUP: case WM_MOUSEMOVE: case WM_MOUSELEAVE: case WM_NCMOUSEHOVER: //Imago 7/10 case WM_NCMOUSELEAVE: //<--^ { WinPoint pointMouse; if (message != WM_MOUSEWHEEL) { WinPoint point(MakePoint(lParam)); pointMouse = WinPoint(point.X(),m_rectClient.YSize() - 1 - point.Y()); m_lastPointMouse = pointMouse; } else { pointMouse = m_lastPointMouse; } // // Handle mouse leave // if (message == WM_MOUSELEAVE || message == WM_NCMOUSELEAVE) { if (m_bMouseInside) { m_bMouseInside = false; OnMouseMessage(WM_MOUSELEAVE, 0, pointMouse); } } else { // // Handle mouse enter // if (!m_bMouseInside && (message != WM_NCMOUSEHOVER && message != WM_MOUSEHOVER && message != 0)) { m_bMouseInside = true; OnMouseMessage(0, 0, pointMouse); if (s_pfnTrackMouseEvent) { TRACKMOUSEEVENT tme; tme.cbSize = sizeof(TRACKMOUSEEVENT); tme.dwFlags = TME_LEAVE; tme.hwndTrack = m_hwnd; tme.dwHoverTime = HOVER_DEFAULT; ZVerify(s_pfnTrackMouseEvent(&tme)); } } // // Handle the mouse message // DWORD ret = OnMouseMessage(message, wParam, pointMouse) ? 0 : 1; } return true; } break; case WM_SETCURSOR: // // use the custom cursor for the client area // if (LOWORD(lParam) == HTCLIENT) { ::SetCursor(NULL); } else { ::SetCursor(GetCursor()); } break; case WM_WINDOWPOSCHANGING: if (OnWindowPosChanging((LPWINDOWPOS)lParam)) return 0; break; } return m_pfnWndProc(m_hwnd, message, wParam, lParam); }
/*------------------------------------------------ subclass procedure of the clock --------------------------------------------------*/ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) // for tooltip { case WM_MOUSEMOVE: case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_MBUTTONDOWN: case WM_LBUTTONUP: case WM_RBUTTONUP: case WM_MBUTTONUP: #if TC_ENABLE_WHEEL case WM_MOUSEWHEEL: #endif OnTooltipMouseMsg(hwnd, message, wParam, lParam); break; } switch(message) { /* -------- drawing & sizing ------------- */ case WM_PAINT: { PAINTSTRUCT ps; HDC hdc; if(g_bNoClock) break; hdc = BeginPaint(hwnd, &ps); OnPaint(hwnd, hdc, NULL); EndPaint(hwnd, &ps); return 0; } case WM_ERASEBKGND: break; case (WM_USER+100): // a message requesting for clock size if(g_bNoClock) break; // sent from parent window return OnCalcRect(hwnd); case WM_WINDOWPOSCHANGING: // size arrangement if(g_bNoClock) break; OnWindowPosChanging(hwnd, (LPWINDOWPOS)lParam); break; case WM_SIZE: if(g_bNoClock) break; CreateClockDC(hwnd); // create offscreen DC return 0; case WM_SYSCOLORCHANGE: case WM_THEMECHANGED: if(g_bNoClock) break; CreateClockDC(hwnd); // create offscreen DC InvalidateRect(hwnd, NULL, FALSE); #if TC_ENABLE_DESKTOPICON SetDesktopIcons(); // desktop.c #endif return 0; case WM_WININICHANGE: case WM_TIMECHANGE: case (WM_USER+101): case WM_SETFOCUS: case WM_KILLFOCUS: if(g_bNoClock) break; InvalidateRect(hwnd, NULL, FALSE); return 0; /* -------- Timers ------------- */ case WM_TIMER: switch (wParam) { case IDTIMER_MAIN: OnTimerMain(hwnd); return 0; #if TC_ENABLE_SYSINFO case IDTIMER_SYSINFO: OnTimerSysInfo(); // sysinfo.c #if TC_ENABLE_DESKTOPICON SetDesktopIcons(); // desktop.c #endif return 0; #endif } if(g_bNoClock) break; return 0; /* -------- Mouse messages ------------- */ case WM_LBUTTONDOWN: // mouse button is down case WM_RBUTTONDOWN: case WM_MBUTTONDOWN: case WM_XBUTTONDOWN: return OnMouseDown(hwnd, message, wParam, lParam); case WM_LBUTTONUP: // mouse button is up case WM_RBUTTONUP: case WM_MBUTTONUP: case WM_XBUTTONUP: return OnMouseUp(hwnd, message, wParam, lParam); case WM_MOUSEMOVE: return 0; case WM_NCRBUTTONUP: return 0; case WM_CONTEXTMENU: PostMessage(g_hwndTClockMain, WM_CONTEXTMENU, wParam, lParam); return 0; case WM_NCHITTEST: // not to pass to g_oldWndProc return DefWindowProc(hwnd, message, wParam, lParam); case WM_MOUSEACTIVATE: return MA_ACTIVATE; #if TC_ENABLE_MOUSEDROP case WM_DROPFILES: // files are dropped PostMessage(g_hwndTClockMain, WM_DROPFILES, wParam, lParam); return 0; #endif #if TC_ENABLE_WHEEL case WM_MOUSEWHEEL: // the mouse wheel is rotated PostMessage(g_hwndTClockMain, WM_MOUSEWHEEL, wParam, lParam); return 0; #endif case WM_NOTIFY: // tooltip { LRESULT res; if(OnTooltipNotify(hwnd, &res, (LPNMHDR)lParam)) return res; break; } /* messages sent from other program */ case CLOCKM_EXIT: // clean up all EndClock(hwnd); return 0; case CLOCKM_REFRESHCLOCK: // refresh the clock OnRefreshClock(hwnd); return 0; case CLOCKM_DELUSRSTR: // clear user strings InitUserStr(); return 0; #if TC_ENABLE_TASKBAR case CLOCKM_REFRESHTASKBAR: // refresh other elements than clock OnRefreshTaskbar(hwnd); return 0; #endif #if TC_ENABLE_STARTMENU case CLOCKM_REFRESHSTARTMENU: // refresh Start menu OnRefreshStartMenu(hwnd); return 0; #endif case CLOCKM_REFRESHTOOLTIP: // refresh tooltip OnRefreshTooltip(hwnd); return 0; case CLOCKM_BLINK: // blink the clock g_nBlink = 2; m_nBlinkSec = lParam; if(lParam) m_nBlinkTick = GetTickCount(); return 0; case CLOCKM_COPY: // copy format to clipboard OnCopy(hwnd, NULL); return 0; #if TC_ENABLE_VOLUME case CLOCKM_VOLCHANGE: OnVolumeChange(hwnd); return 0; #endif case WM_COPYDATA: OnCopyData(hwnd, (HWND)wParam, (COPYDATASTRUCT*)lParam); return 0; /* WM_DESTROY is sent only when Win95+IE4/98/Me is shut down */ case WM_DESTROY: OnDestroy(hwnd); // main2.c break; } return CallWindowProc(g_oldWndProc, hwnd, message, wParam, lParam); }
INT_PTR Dialog::DialogProcDefault(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CLOSE: { return OnClose(); } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDOK: OnOK(); return TRUE; case IDCANCEL: OnCancel(); return TRUE; default: return OnCommand(wParam, lParam); } break; } case WM_CONTEXTMENU: { POINT pt = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)}; OnContextMenu(reinterpret_cast<HWND>(wParam), pt); break; } case WM_DESTROY: { OnDestroy(); break; } case WM_INITDIALOG: { #ifdef TAIGA_WIN_DIALOG_REMEMBER_LAST_POSITION_AND_SIZE if (pos_last_.x && pos_last_.y) SetPosition(nullptr, pos_last_.x, pos_last_.y, 0, 0, SWP_NOSIZE); if (size_last_.cx && size_last_.cy) SetPosition(nullptr, 0, 0, size_last_.cx, size_last_.cy, SWP_NOMOVE); #endif return OnInitDialog(); } case WM_DROPFILES: { OnDropFiles(reinterpret_cast<HDROP>(wParam)); break; } case WM_ENTERSIZEMOVE: case WM_EXITSIZEMOVE: { SIZE size = {0}; OnSize(uMsg, 0, size); break; } case WM_GETMINMAXINFO: { LPMINMAXINFO mmi = reinterpret_cast<LPMINMAXINFO>(lParam); SetMinMaxInfo(mmi); OnGetMinMaxInfo(mmi); break; } case WM_LBUTTONDOWN: case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONUP: case WM_RBUTTONUP: case WM_MOUSEACTIVATE: case WM_MOUSEHOVER: case WM_MOUSEHWHEEL: case WM_MOUSELEAVE: case WM_MOUSEMOVE: case WM_MOUSEWHEEL: { LRESULT result = OnMouseEvent(uMsg, wParam, lParam); if (result != -1) { ::SetWindowLongPtrW(hwnd, DWL_MSGRESULT, result); return TRUE; } break; } case WM_MOVE: { POINTS pts = MAKEPOINTS(lParam); OnMove(&pts); break; } case WM_NOTIFY: { LRESULT result = OnNotify(wParam, reinterpret_cast<LPNMHDR>(lParam)); if (result) { ::SetWindowLongPtr(hwnd, DWL_MSGRESULT, result); return TRUE; } break; } case WM_PAINT: { if (::GetUpdateRect(hwnd, nullptr, FALSE)) { PAINTSTRUCT ps; HDC hdc = ::BeginPaint(hwnd, &ps); OnPaint(hdc, &ps); ::EndPaint(hwnd, &ps); } else { HDC hdc = ::GetDC(hwnd); OnPaint(hdc, nullptr); ::ReleaseDC(hwnd, hdc); } break; } case WM_SIZE: { SIZE size = {LOWORD(lParam), HIWORD(lParam)}; OnSize(uMsg, static_cast<UINT>(wParam), size); break; } case WM_TIMER: { OnTimer(static_cast<UINT_PTR>(wParam)); break; } case WM_WINDOWPOSCHANGING: { LPWINDOWPOS window_pos = reinterpret_cast<LPWINDOWPOS>(lParam); SnapToEdges(window_pos); OnWindowPosChanging(window_pos); break; } default: { if (uMsg == WM_TASKBARCREATED || uMsg == WM_TASKBARBUTTONCREATED || uMsg == WM_TASKBARCALLBACK) { OnTaskbarCallback(uMsg, lParam); return FALSE; } break; } } return FALSE; }