/**
 * @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;
	}
}
Exemple #2
0
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);
}