====== Creating a link within a dialog ====== This code snippet is originally from the former WinAPI site www.winapi.net To create a link within a dialog box, you have to add a //Text// to your dialog, which should be used as link. Assign the //Notify//-Style to this text control. {{:url1.png?300}} We use the Name //IDC_URL// for this control. Now we add the following code to your dialog procedure. After clicking the text you will be redirected to the website with the standard browser. case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_URL: if(HIWORD(wParam) == STN_CLICKED) { ShellExecute(hWnd, NULL, TEXT("http://www.pellesc.de/"), NULL, NULL, SW_SHOW); } return(TRUE); } To get your link underlined, add the following code: case WM_INITDIALOG: { LOGFONT lf; if(NULL == (hFont = (HFONT)SendDlgItemMessage(hWnd, IDC_URL, WM_GETFONT, 0, 0))) hFont = (HFONT)GetStockObject(SYSTEM_FONT); GetObject((HGDIOBJ)hFont, sizeof(lf), &lf); lf.lfUnderline = TRUE; hFont = CreateFontIndirect(&lf); SendDlgItemMessage(hWnd, IDC_URL, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE); } return(TRUE); case WM_NCDESTROY: if(hFont) { DeleteObject((HGDIOBJ)hFont); } break; Don't forget to add a ''HFONT hFont'' to your dialog procedure! To change the cursor you have to create at first a gobal variable: WNDPROC g_wndpStatic; Add the following code to your dialog procedure: g_wndpStatic = (WNDPROC)SetWindowLongPtr(GetDlgItem(hWnd, IDC_URL), GWLP_WNDPROC, (LONG_PTR)UrlProc); Now we only need the subclass procedure to react on the **WM_SETCURSOR** message: LRESULT CALLBACK UrlProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_SETCURSOR: SetCursor(LoadCursor(NULL, IDC_HAND)); return(TRUE); default: break; } return(CallWindowProc(g_wndpStatic, hWnd, uMsg, wParam, lParam)); } Mostly, the URL links within a dialog are blue, so we have to change the text color: case WM_CTLCOLORSTATIC: if(GetDlgItem(hWnd, IDC_URL) == (HWND)lParam) { SetTextColor((HDC)wParam, GetSysColor(COLOR_HIGHLIGHT)); SetBkMode((HDC)wParam, TRANSPARENT); return((BOOL)GetStockObject(NULL_BRUSH)); } break; That's it. Now you have a link within your dialog like this: {{:url2.png}} ====== Complete sourcecode ====== LRESULT CALLBACK UrlProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_SETCURSOR: SetCursor(LoadCursor(NULL, IDC_HAND)); return(TRUE); default: break; } return(CallWindowProc(g_wndpStatic, hWnd, uMsg, wParam, lParam)); } LRESULT CALLBACK AboutDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { HFONT hFont; switch (uMsg) { case WM_INITDIALOG: { LOGFONT lf; if(NULL == (hFont = (HFONT)SendDlgItemMessage(hDlg, IDC_URL, WM_GETFONT, 0, 0))) hFont = (HFONT)GetStockObject(SYSTEM_FONT); GetObject((HGDIOBJ)hFont, sizeof(lf), &lf); lf.lfUnderline = TRUE; hFont = CreateFontIndirect(&lf); SendDlgItemMessage(hDlg, IDC_URL, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE); if(NULL == (hFont = (HFONT)SendDlgItemMessage(hDlg, IDC_APPNAME, WM_GETFONT, 0, 0))) hFont = (HFONT)GetStockObject(SYSTEM_FONT); GetObject((HGDIOBJ)hFont, sizeof(lf), &lf); lf.lfHeight = 16; lf.lfWeight = FW_BOLD; hFont = CreateFontIndirect(&lf); SendDlgItemMessage(hDlg, IDC_APPNAME, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE); g_wndpStatic = (WNDPROC)SetWindowLongPtr(GetDlgItem(hDlg, IDC_URL), GWLP_WNDPROC, (LONG_PTR)UrlProc); } return TRUE; case WM_COMMAND: switch (wParam) { case IDC_URL: if(HIWORD(wParam) == STN_CLICKED) { ShellExecute(hDlg, NULL, TEXT("http://www.pellesc.de/"), NULL, NULL, SW_SHOW); } return(TRUE); case IDOK: EndDialog(hDlg, TRUE); return TRUE; } break; case WM_CTLCOLORSTATIC: if(GetDlgItem(hDlg, IDC_URL) == (HWND)lParam) { SetTextColor((HDC)wParam, GetSysColor(COLOR_HOTLIGHT)); SetBkMode((HDC)wParam, TRANSPARENT); return((BOOL)GetStockObject(NULL_BRUSH)); } break; case WM_NCDESTROY: if(hFont) { DeleteObject((HGDIOBJ)hFont); } break; } return FALSE; }