123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698 |
- #include "main.h"
- #include "./commandLink.h"
- #include "./api.h"
- //#include "./guiObjects.h"
- #include <windows.h>
- #include <shlwapi.h>
- #include <commctrl.h>
- #include <strsafe.h>
- #ifndef LONGX86
- #ifdef _WIN64
- #define LONGX86 LONG_PTR
- #else /*_WIN64*/
- #define LONGX86 LONG
- #endif /*_WIN64*/
- #endif // LONGX86
- #define MARGIN_LEFT 2
- #define MARGIN_TOP 0
- #define MARGIN_RIGHT 2
- #define MARGIN_BOTTOM 1
- typedef struct __COMMANDLINK
- {
- COLORREF rgbBk;
- COLORREF rgbText;
- COLORREF rgbTextVisited;
- COLORREF rgbTextHighlight;
- HCURSOR cursorHot;
- HFONT textFont;
- UINT state;
- RECT margins;
- } COMMANDLINK;
- #define GetCommandLink(__hwnd) ((COMMANDLINK*)(LONG_PTR)(LONGX86)GetWindowLongPtrW((__hwnd), 0))
- static LRESULT CALLBACK CommandLink_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- EXTERN_C BOOL CommandLink_RegisterClass(HINSTANCE hInstance)
- {
- WNDCLASSEXW wc;
- ATOM klassAtom;
- if (GetClassInfoExW(hInstance, NWC_COMMANDLINKW, &wc))
- return TRUE;
- ZeroMemory(&wc, sizeof(WNDCLASSEXW));
- wc.cbSize = sizeof(WNDCLASSEXW);
- wc.hInstance = hInstance;
- wc.lpszClassName = NWC_COMMANDLINKW;
- wc.lpfnWndProc = CommandLink_WindowProc;
- wc.style = CS_GLOBALCLASS;
- wc.hIcon = NULL;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = NULL;
- wc.cbWndExtra = sizeof(COMMANDLINK*);
-
- klassAtom = RegisterClassExW(&wc);
- if (0 == klassAtom)
- return FALSE;
- if (NULL != WASABI_API_APP)
- WASABI_API_APP->DirectMouseWheel_RegisterSkipClass(klassAtom);
- return TRUE;
- }
- static COLORREF CommandLink_BlendColors(COLORREF rgbTop, COLORREF rgbBottom, INT alpha)
- {
- if (alpha > 254) return rgbTop;
- if (alpha < 0) return rgbBottom;
- INT k = (((255 - alpha)*255 + 127)/255);
-
- return RGB( (GetRValue(rgbTop)*alpha + k*GetRValue(rgbBottom) + 127)/255,
- (GetGValue(rgbTop)*alpha + k*GetGValue(rgbBottom) + 127)/255,
- (GetBValue(rgbTop)*alpha + k*GetBValue(rgbBottom) + 127)/255);
- }
- static HBRUSH CommandLink_GetPaintColors(HWND hwnd, HDC hdc, COLORREF *rgbBkOut, COLORREF *rgbFgOut)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == link) return NULL;
-
- COLORREF rgbBk, rgbFg;
- UINT windowStyle = GetWindowLongPtrW(hwnd, GWL_STYLE);
- BOOL defaultColors = (0 != (CLS_DEFAULTCOLORS & windowStyle));
- rgbBk = (defaultColors) ? GetSysColor(COLOR_3DFACE) : link->rgbBk;
- if (NULL != rgbBkOut) *rgbBkOut = rgbBk;
- if (0 != (WS_DISABLED & windowStyle))
- rgbFg = GetSysColor(COLOR_GRAYTEXT);
- else
- {
- if (0 != (CLIS_VISITED & link->state))
- rgbFg = (defaultColors) ? RGB(85, 26, 139) : link->rgbTextVisited;
- else
- rgbFg = (defaultColors) ? GetSysColor(COLOR_HOTLIGHT) : link->rgbText;
- if (0 != ((CLIS_HOT | CLIS_PRESSED) & link->state))
- {
- if (0 == (CLS_HIGHLIGHTCOLOR & windowStyle))
- rgbFg = CommandLink_BlendColors(rgbFg, rgbBk, 160);
- else
- rgbFg = link->rgbTextHighlight;
- }
- }
- if (NULL != rgbFgOut)
- *rgbFgOut = rgbFg;
-
- HBRUSH backBrush = NULL;
- if (FALSE != defaultColors)
- {
- HWND hParent = GetParent(hwnd);
- if (NULL != hParent)
- {
- COLORREF backBk = SetBkColor(hdc, rgbBk);
- COLORREF backFg = SetBkColor(hdc, rgbFg);
- backBrush = (HBRUSH)SendMessageW(hParent, WM_CTLCOLORSTATIC, (WPARAM)hdc, (LPARAM)hwnd);
- rgbBk = SetBkColor(hdc, backBk);
- SetBkColor(hdc, backFg);
- }
- }
- return backBrush;
- }
- static BOOL CommandLink_GetTextRect(HDC hdc, LPCWSTR pszText, INT cchText, const RECT *prcClient, RECT *prcTextOut, const RECT *margins)
- {
- if (NULL == prcClient || NULL == prcTextOut)
- return FALSE;
- SIZE textSize;
- if (0 == cchText || !GetTextExtentPoint32W(hdc, pszText, cchText, &textSize))
- return SetRectEmpty(prcTextOut);
-
- prcTextOut->left = ((prcClient->right - prcClient->left) - textSize.cx) / 2;
- if (prcTextOut->left < (prcClient->left + margins->left))
- prcTextOut->left = prcClient->left + margins->left;
-
- prcTextOut->top = ((prcClient->bottom - prcClient->top) - textSize.cy) / 2;
- if (prcTextOut->top < (prcClient->top + margins->top))
- prcTextOut->top = prcClient->top + margins->top;
- prcTextOut->right = prcTextOut->left + textSize.cx;
- if (prcTextOut->right > (prcClient->right - margins->right))
- prcTextOut->right = prcClient->right - margins->right;
- prcTextOut->bottom = prcTextOut->top + textSize.cy;
- if (prcTextOut->bottom > (prcClient->bottom - margins->bottom))
- prcTextOut->bottom = prcClient->bottom - margins->bottom;
-
- return TRUE;
- }
- static BOOL CommandLink_GetIdealSizeReal(HWND hwnd, SIZE *sizeOut)
- {
- if (NULL == sizeOut)
- return FALSE;
-
- ZeroMemory(sizeOut, sizeof(SIZE));
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == link) return FALSE;
- WCHAR szText[256] = {0};
- INT cchText = GetWindowTextW(hwnd, szText, ARRAYSIZE(szText));
-
- HDC hdc = GetDCEx(hwnd, NULL, DCX_CACHE | DCX_WINDOW | DCX_NORESETATTRS);
- if (NULL == hdc) return FALSE;
- HFONT originalFont = (HFONT)SelectObject(hdc, link->textFont);
- BOOL resultOk;
- if (0 == cchText)
- {
- TEXTMETRICW tm;
- resultOk = GetTextMetricsW(hdc, &tm);
- if (resultOk) sizeOut->cy = tm.tmHeight;
- }
- else
- resultOk = GetTextExtentPoint32W(hdc, szText, cchText, sizeOut);
-
- if (originalFont != link->textFont) SelectObject(hdc, originalFont);
- ReleaseDC(hwnd, hdc);
- if (resultOk)
- {
- sizeOut->cx += (link->margins.left + link->margins.right);
- sizeOut->cy += (link->margins.top + link->margins.bottom);
- }
- return resultOk;
- }
- static BOOL CommandLink_SetStateEx(HWND hwnd, UINT newState, UINT stateMask, BOOL fRedraw)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == link) return FALSE;
-
- UINT oldState = link->state;
- link->state = (link->state & ~stateMask) | (newState & stateMask);
- if (oldState != link->state && fRedraw)
- InvalidateRect(hwnd, NULL, TRUE);
-
- return TRUE;
- }
- static void CommandLink_Paint(HWND hwnd, HDC hdc, const RECT *prcPaint, BOOL fErase)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == link) return;
- RECT clientRect, partRect;
- if (!GetClientRect(hwnd, &clientRect)) return;
- DWORD windowStyle = GetWindowLongPtrW(hwnd, GWL_STYLE);
- COLORREF rgbBk, rgbFg;
- HBRUSH backBrush = CommandLink_GetPaintColors(hwnd, hdc, &rgbBk, &rgbFg);
- COLORREF originalBk = SetBkColor(hdc, rgbBk);
- COLORREF originalFg = SetTextColor(hdc, rgbFg);
- HFONT originalFont = (HFONT)SelectObject(hdc, link->textFont);
- WCHAR szText[256] = {0};
- INT cchText = GetWindowTextW(hwnd, szText, ARRAYSIZE(szText));
- RECT textRect;
- CommandLink_GetTextRect(hdc, szText, cchText, &clientRect, &textRect, &link->margins);
- if (fErase)
- {
- if(NULL != backBrush)
- {
- FillRect(hdc, prcPaint, backBrush);
- }
- else
- {
- ExtTextOut(hdc, 0, 0, ETO_OPAQUE, prcPaint, NULL, 0, NULL);
- }
- }
- if (0 != ((CLIS_HOT | CLIS_PRESSED) & link->state) ||
- 0 != (CLS_ALWAYSUNDERLINE & windowStyle))
- {
- TEXTMETRIC tm;
- if (GetTextMetrics(hdc, &tm))
- {
- CopyRect(&partRect, &textRect);
- partRect.top = partRect.top + tm.tmAscent + 1;
- partRect.bottom = partRect.top + 1;
-
- COLORREF originalColor = SetBkColor(hdc, rgbFg);
- ExtTextOut(hdc, 0, 0, ETO_OPAQUE, &partRect, NULL, 0, NULL);
- if (originalColor != rgbFg) SetBkColor(hdc, originalColor);
- }
- }
- if (0 != cchText)
- {
- INT originalMode = SetBkMode(hdc, TRANSPARENT);
- UINT originalAlign = SetTextAlign(hdc, TA_LEFT | TA_TOP);
- ExtTextOutW(hdc, textRect.left, textRect.top, ETO_CLIPPED, &textRect, szText, cchText, NULL);
- if (TRANSPARENT != originalMode) SetBkMode(hdc, originalMode);
- if ((TA_LEFT | TA_TOP) != originalAlign) SetTextAlign(hdc, originalAlign);
- }
- if (CLIS_FOCUSED == ((CLIS_FOCUSED | CLIS_HIDEFOCUS) & link->state))
- {
- SetBkColor(hdc, 0x00FFFFFF);
- SetTextColor(hdc, 0x000000000);
- DrawFocusRect(hdc, &clientRect);
- }
- SelectObject(hdc, originalFont);
- if (originalBk != rgbBk) SetBkColor(hdc, originalBk);
- if (originalFg != rgbFg) SetTextColor(hdc, originalFg);
- }
- static void CommandLink_NotifyParent(HWND hwnd, UINT notificationId)
- {
- NMHDR nmhdr;
- nmhdr.code = notificationId;
- nmhdr.hwndFrom = hwnd;
- nmhdr.idFrom = GetDlgCtrlID(hwnd);
- HWND hParent = GetParent(hwnd);
- if (NULL != hParent)
- {
- SendMessageW(hParent, WM_NOTIFY, (WPARAM)nmhdr.idFrom, (LPARAM)&nmhdr);
- }
- }
- static void CommandLink_Click(HWND hwnd)
- {
- CommandLink_NotifyParent(hwnd, NM_CLICK);
-
- DWORD windowStyle = GetWindowLongPtrW(hwnd, GWL_STYLE);
- if (0 != (CLS_TRACKVISITED & windowStyle))
- CommandLink_SetStateEx(hwnd, CLIS_VISITED, CLIS_VISITED, TRUE);
- }
- static void CommandLink_QueryUiState(HWND hwnd)
- {
- UINT uiState = (UINT)DefWindowProcW(hwnd, WM_QUERYUISTATE, 0, 0L);
- CommandLink_SetStateEx(hwnd, (0 != (UISF_HIDEFOCUS & uiState)) ? CLIS_HIDEFOCUS : 0, CLIS_HIDEFOCUS, TRUE);
- }
- static LRESULT CommandLink_OnCreateWindow(HWND hwnd, CREATESTRUCT *pcs)
- {
- UNREFERENCED_PARAMETER(pcs);
- COMMANDLINK *link;
- link = (COMMANDLINK*)calloc(1, sizeof(COMMANDLINK));
- if (NULL == link)
- {
- DestroyWindow(hwnd);
- return -1;
- }
- SetLastError(ERROR_SUCCESS);
- if (!SetWindowLongPtrW(hwnd, 0, (LONGX86)(LONG_PTR)link) && ERROR_SUCCESS != GetLastError())
- {
- free(link);
- DestroyWindow(hwnd);
- return -1;
- }
- link->rgbBk = GetSysColor(COLOR_3DFACE);
- link->rgbText = GetSysColor(COLOR_HOTLIGHT);
- link->rgbTextVisited = (0x00FFFFFF & (~link->rgbText));
- link->rgbTextHighlight = GetSysColor(COLOR_HOTLIGHT);
- link->cursorHot = LoadCursor(NULL, IDC_HAND);
- SetRect(&link->margins, MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT, MARGIN_BOTTOM);
- CommandLink_QueryUiState(hwnd);
- return FALSE;
- }
- static void CommandLink_OnDestroy(HWND hwnd)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- SetWindowLongPtrW(hwnd, 0, 0L);
- if (!link) return;
-
- free(link);
- }
- static void CommandLink_OnPaint(HWND hwnd)
- {
- PAINTSTRUCT ps;
- if (BeginPaint(hwnd, &ps))
- {
- if (ps.rcPaint.left != ps.rcPaint.right)
- CommandLink_Paint(hwnd, ps.hdc, &ps.rcPaint, ps.fErase);
- EndPaint(hwnd, &ps);
- }
- }
- static void CommandLink_OnPrintClient(HWND hwnd, HDC hdc, UINT options)
- {
- RECT clientRect;
- if (GetClientRect(hwnd, &clientRect))
- CommandLink_Paint(hwnd, hdc, &clientRect, 0 != (PRF_ERASEBKGND & options));
- }
- static void CommandLink_OnSetFocus(HWND hwnd, HWND lostFocus)
- {
- UNREFERENCED_PARAMETER(lostFocus);
- CommandLink_SetStateEx(hwnd, CLIS_FOCUSED, CLIS_FOCUSED, TRUE);
- CommandLink_NotifyParent(hwnd, NM_SETFOCUS);
- }
- static void CommandLink_OnKillFocus(HWND hwnd, HWND receiveFocus)
- {
- UNREFERENCED_PARAMETER(receiveFocus);
- CommandLink_SetStateEx(hwnd, 0, CLIS_FOCUSED, TRUE);
- CommandLink_NotifyParent(hwnd, NM_KILLFOCUS);
- }
- static void CommandLink_OnMouseMove(HWND hwnd, UINT mouseFlags, POINTS pts)
- {
- UNREFERENCED_PARAMETER(mouseFlags);
- UNREFERENCED_PARAMETER(pts);
- UINT windowStyle = GetWindowLongPtrW(hwnd, GWL_STYLE);
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL != link)
- {
- if (0 == (CLIS_HOT & link->state) && 0 != (CLS_HOTTRACK & windowStyle))
- {
- link->state |= CLIS_HOT;
- InvalidateRect(hwnd, NULL, FALSE);
- TRACKMOUSEEVENT tm;
- tm.cbSize = sizeof(TRACKMOUSEEVENT);
- tm.dwFlags = TME_LEAVE;
- tm.hwndTrack = hwnd;
- TrackMouseEvent(&tm);
- }
- }
- }
- static void CommandLink_OnMouseLeave(HWND hwnd)
- {
- CommandLink_SetStateEx(hwnd, 0, CLIS_HOT, TRUE);
- }
- static void CommandLink_OnLButtonDown(HWND hwnd, UINT mouseFlags, POINTS pts)
- {
- UNREFERENCED_PARAMETER(mouseFlags);
- UNREFERENCED_PARAMETER(pts);
- if (IsWindowEnabled(hwnd) && hwnd != GetFocus())
- SetFocus(hwnd);
-
- CommandLink_SetStateEx(hwnd, CLIS_PRESSED, CLIS_PRESSED, TRUE);
- if (hwnd != GetCapture())
- SetCapture(hwnd);
- }
- static void CommandLink_OnLButtonUp(HWND hwnd, UINT mouseFlags, POINTS pts)
- {
- UNREFERENCED_PARAMETER(mouseFlags);
- RECT clientRect;
- POINT pt;
- POINTSTOPOINT(pt, pts);
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL != link && 0 != (CLIS_PRESSED & link->state))
- {
- if (GetClientRect(hwnd, &clientRect) && PtInRect(&clientRect, pt))
- CommandLink_Click(hwnd);
- CommandLink_SetStateEx(hwnd, 0, CLIS_PRESSED, TRUE);
- }
- if (hwnd == GetCapture())
- SetCapture(NULL);
- }
- static void CommandLink_OnKeyDown(HWND hwnd, UINT virtualKey, UINT keyFlags)
- {
- UNREFERENCED_PARAMETER(hwnd);
- UNREFERENCED_PARAMETER(virtualKey);
- UNREFERENCED_PARAMETER(keyFlags);
-
- }
- static void CommandLink_OnKeyUp(HWND hwnd, UINT virtualKey, UINT keyFlags)
- {
- UNREFERENCED_PARAMETER(keyFlags);
- switch(virtualKey)
- {
- case VK_SPACE:
- CommandLink_Click(hwnd);
- break;
- }
- }
- static void CommandLink_OnEnable(HWND hwnd, BOOL fEnabled)
- {
- UNREFERENCED_PARAMETER(fEnabled);
- InvalidateRect(hwnd, NULL, TRUE);
- }
- static void CommandLink_OnUpdateUiState(HWND hwnd, UINT actionId, UINT stateId)
- {
- DefWindowProcW(hwnd, WM_UPDATEUISTATE, MAKEWPARAM(actionId, stateId), 0L);
- CommandLink_QueryUiState(hwnd);
- }
- static void CommandLink_OnSetFont(HWND hwnd, HFONT newFont, BOOL fRedraw)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL != link) link->textFont = newFont;
- if (FALSE != fRedraw)
- InvalidateRect(hwnd, NULL, TRUE);
- }
- static LRESULT CommandLink_OnGetFont(HWND hwnd)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- return (LRESULT)((NULL != link) ? link->textFont : NULL);
- }
- static LRESULT CommandLink_OnSetCursor(HWND hwnd, HWND cursorWindow, UINT hitTest, UINT uMsg)
- {
- UNREFERENCED_PARAMETER(cursorWindow);
- UNREFERENCED_PARAMETER(hitTest);
- UNREFERENCED_PARAMETER(uMsg);
- if (IsWindowEnabled(hwnd))
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL != link && NULL != link->cursorHot)
- {
- SetCursor(link->cursorHot);
- return TRUE;
- }
- }
- return FALSE;
- }
- static LRESULT CommandLink_OnGetIdealHeight(HWND hwnd)
- {
- SIZE windowSize;
- return (CommandLink_GetIdealSizeReal(hwnd, &windowSize)) ? windowSize.cy : 0;
- }
- static LRESULT CommandLink_OnGetIdealSize(HWND hwnd, SIZE *sizeOut)
- {
- return CommandLink_GetIdealSizeReal(hwnd, sizeOut);
- }
- static void CommandLink_OnResetVisited(HWND hwnd)
- {
- CommandLink_SetStateEx(hwnd, 0, CLIS_VISITED, TRUE);
- }
- static BOOL CommandLink_OnGetMargins(HWND hwnd, RECT *prc)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == prc || NULL == link) return FALSE;
- return CopyRect(prc, &link->margins);
- }
- static BOOL CommandLink_OnSetMargins(HWND hwnd, const RECT *prc)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == prc || NULL == link) return FALSE;
- return CopyRect(&link->margins, prc);
- }
- static BOOL CommandLink_OnSetBackColor(HWND hwnd, COLORREF rgb)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == link) return FALSE;
-
- link->rgbBk = rgb;
- return TRUE;
- }
- static BOOL CommandLink_OnGetBackColor(HWND hwnd)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- return (NULL != link) ? link->rgbBk : RGB(255, 0, 255);
- }
- static BOOL CommandLink_OnSetTextColor(HWND hwnd, COLORREF rgb)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == link) return FALSE;
-
- link->rgbText = rgb;
- return TRUE;
- }
- static BOOL CommandLink_OnGetTextColor(HWND hwnd)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- return (NULL != link) ? link->rgbText : RGB(255, 0, 255);
- }
- static BOOL CommandLink_OnSetVisitedColor(HWND hwnd, COLORREF rgb)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == link) return FALSE;
-
- link->rgbTextVisited = rgb;
- return TRUE;
- }
- static BOOL CommandLink_OnGetVisitedColor(HWND hwnd)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- return (NULL != link) ? link->rgbTextVisited : RGB(255, 0, 255);
- }
- static BOOL CommandLink_OnSetHighlightColor(HWND hwnd, COLORREF rgb)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- if (NULL == link) return FALSE;
-
- link->rgbTextHighlight = rgb;
- return TRUE;
- }
- static BOOL CommandLink_OnGetHighlightColor(HWND hwnd)
- {
- COMMANDLINK *link = GetCommandLink(hwnd);
- return (NULL != link) ? link->rgbTextHighlight : RGB(255, 0, 255);
- }
- static LRESULT CALLBACK CommandLink_WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
- {
- switch ( uMsg )
- {
- case WM_CREATE:
- return CommandLink_OnCreateWindow( hwnd, (CREATESTRUCT *) lParam );
- case WM_DESTROY:
- CommandLink_OnDestroy( hwnd );
- return 0;
- case WM_PAINT:
- CommandLink_OnPaint( hwnd );
- return 0;
- case WM_PRINTCLIENT:
- CommandLink_OnPrintClient( hwnd, (HDC) wParam, (UINT) lParam );
- return 0;
- case WM_ERASEBKGND:
- return 0;
- case WM_SETFONT:
- CommandLink_OnSetFont( hwnd, (HFONT) wParam, (BOOL) LOWORD( lParam ) );
- return 0;
- case WM_GETFONT:
- return CommandLink_OnGetFont( hwnd );
- case WM_SETFOCUS:
- CommandLink_OnSetFocus( hwnd, (HWND) wParam );
- return 0;
- case WM_KILLFOCUS:
- CommandLink_OnKillFocus( hwnd, (HWND) wParam );
- return 0;
- case WM_MOUSEMOVE:
- CommandLink_OnMouseMove( hwnd, (UINT) wParam, MAKEPOINTS( lParam ) );
- return 0;
- case WM_MOUSELEAVE:
- CommandLink_OnMouseLeave( hwnd );
- return 0;
- case WM_LBUTTONDOWN:
- CommandLink_OnLButtonDown( hwnd, (UINT) wParam, MAKEPOINTS( lParam ) );
- return 0;
- case WM_LBUTTONUP:
- CommandLink_OnLButtonUp( hwnd, (UINT) wParam, MAKEPOINTS( lParam ) );
- return 0;
- case WM_KEYDOWN:
- CommandLink_OnKeyDown( hwnd, (UINT) wParam, (UINT) lParam );
- return 0;
- case WM_KEYUP:
- CommandLink_OnKeyUp( hwnd, (UINT) wParam, (UINT) lParam );
- return 0;
- case WM_ENABLE:
- CommandLink_OnEnable( hwnd, (BOOL) wParam );
- return 0;
- case WM_UPDATEUISTATE:
- CommandLink_OnUpdateUiState( hwnd, LOWORD( wParam ), HIWORD( wParam ) );
- return 0;
- case WM_SETCURSOR:
- return CommandLink_OnSetCursor( hwnd, (HWND) wParam, LOWORD( lParam ), HIWORD( lParam ) );
- case CLM_GETIDEALHEIGHT:
- return CommandLink_OnGetIdealHeight( hwnd );
- case CLM_GETIDEALSIZE:
- return CommandLink_OnGetIdealSize( hwnd, (SIZE *) lParam );
- case CLM_RESETVISITED:
- CommandLink_OnResetVisited( hwnd );
- return 0;
- case CLM_GETMARGINS:
- return CommandLink_OnGetMargins( hwnd, (RECT *) lParam );
- case CLM_SETMARGINS:
- return CommandLink_OnSetMargins( hwnd, (const RECT *) lParam );
- case CLM_SETBACKCOLOR:
- return CommandLink_OnSetBackColor( hwnd, (COLORREF) lParam );
- case CLM_GETBACKCOLOR:
- return CommandLink_OnGetBackColor( hwnd );
- case CLM_SETTEXTCOLOR:
- return CommandLink_OnSetTextColor( hwnd, (COLORREF) lParam );
- case CLM_GETTEXTCOLOR:
- return CommandLink_OnGetTextColor( hwnd );
- case CLM_SETVISITEDCOLOR:
- return CommandLink_OnSetVisitedColor( hwnd, (COLORREF) lParam );
- case CLM_GETVISITEDCOLOR:
- return CommandLink_OnGetVisitedColor( hwnd );
- case CLM_SETHIGHLIGHTCOLOR:
- return CommandLink_OnSetHighlightColor( hwnd, (COLORREF) lParam );
- case CLM_GETHIGHLIGHTCOLOR:
- return CommandLink_OnGetHighlightColor( hwnd );
- }
- return DefWindowProcW( hwnd, uMsg, wParam, lParam );
- }
|