/** * @brief WM_DESTROY handler of simplified dialog. * @param hwnd - window handle. */ static void SimpleDlg_OnDestroy(HWND hwnd) { hwnd; g_hlURL.Detach(); g_hlMailTo.Detach(); if (g_hwndToolTip) { DestroyWindow(g_hwndToolTip); g_hwndToolTip = NULL; } }
HRESULT CHyperLink::NewProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ CHyperLink *pHLink = (CHyperLink *)GetWindowLong(hWnd, GWL_USERDATA); if (pHLink == NULL || pHLink->m_hWnd == NULL) { return DefWindowProc(hWnd, uMsg, wParam, lParam); } switch(uMsg) { case WM_LBUTTONDOWN: return 0; case WM_LBUTTONUP: //左键up出发超链接,用上边的down也可以,看个人爱好。 { TCHAR szUrl[MAX_URL_LEN] = {0}; LPCTSTR lpszUrl; if(*pHLink->m_szUrl == _T('\0')) //未指定url时,用控件本身text当作url。 { GetWindowText(hWnd, szUrl, MAX_TEXT_LEN); lpszUrl = szUrl; } else lpszUrl = pHLink->m_szUrl; ShellExecute(NULL, _T("open"), lpszUrl, NULL, NULL, SW_SHOWNORMAL); } return 0; case WM_PAINT: //绘制控件为超链接样式 { COLORREF crText; if (pHLink->m_bMouseOn) { crText = RGB(255, 0, 0); } else{ crText = RGB(0, 0, 255); } LPCTSTR lpszText; TCHAR szText[MAX_TEXT_LEN] = {0}; if(*pHLink->m_szText == _T('\0')) //未指定text时,用控件本身的。 { GetWindowText(hWnd, szText, MAX_TEXT_LEN); lpszText = szText; } else lpszText = pHLink->m_szText; RECT rcDraw = {0}; GetClientRect(pHLink->m_hWnd, &rcDraw); PAINTSTRUCT ps = {0}; BeginPaint(hWnd, &ps); SelectObject(ps.hdc, pHLink->m_hFont); SetTextColor(ps.hdc, crText); SetBkMode(ps.hdc, TRANSPARENT); DrawText(ps.hdc, lpszText, -1, &rcDraw, DT_VCENTER | DT_SINGLELINE); //这里为了偷懒用了整个客户区的rect,此处还可优化 EndPaint(hWnd, &ps); } return TRUE; case WM_SETCURSOR: //设置鼠标为手型 SetCursor(LoadCursor(NULL, IDC_HAND)); return TRUE; case WM_MOUSEMOVE: pHLink->OnMouseMove(wParam, lParam); return 0; case WM_CAPTURECHANGED: //鼠标捕获结束,此消息重要 pHLink->m_bMouseOn = FALSE; return 0; case WM_DESTROY: pHLink->Detach(); break; default: break; } return CallWindowProc(pHLink->m_pOldProc, hWnd, uMsg, wParam, lParam); }