首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Win32 進階:為鎖屏軟體新增超連結按鈕實現詳解

     編輯:關於C語言

前言

Windows 下一切皆視窗,超連結也是視窗。效果:滑鼠懸停時字體由綠變紅、滑鼠變手型,點擊啟動預設瀏覽器開啟指定網頁。

實現剖析

  1. 建立按鈕視窗,使用 Windows 內建 button 類別,指定 BS_OWNERDRAW 風格實現無明顯按壓痕跡、懸停不改變形狀的按鈕。
  2. 捕獲並處理取得/失去滑鼠的訊息(WM_SETCURSOR),實現懸停時改變按鈕文字顏色與滑鼠形狀。
  3. 處理按鈕點擊訊息(WM_COMMAND),呼叫 ShellExecute 開啟網頁。

關鍵代碼片段

建立按鈕

m_hInfoButton = CreateWindowEx(WS_EX_NOACTIVATE,
    TEXT("button"), TEXT("infobutton"),
    WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
    30, 50, 100, 50,
    hWnd, (HMENU)SUBWND_INFO_BUTTON,
    ((LPCREATESTRUCT)lParam)->hInstance, NULL);

處理滑鼠進入/離開

case WM_SETCURSOR:
    if ((HWND)wParam == m_hADHandle) {
        SetCursor(LoadCursor(NULL, IDC_HAND));
        HDC hSubdc = GetDC((HWND)wParam);
        SetTextColor(hSubdc, RGB(255, 0, 0));
        TextOut(hSubdc, 0, 0, TEXT("趙大哥博客園主頁"), ...);
        ReleaseDC(m_hADHandle, hSubdc);
        return TRUE; // 屏蔽 DefWindowProc 防止閃爍
    }
    // ... 其他按鈕同理 ...
    break;

處理點擊開啟瀏覽器

case WM_COMMAND:
    switch (LOWORD(wParam)) {
        case SUBWND_COPYRIGHT_BUTTON:
            if (HIWORD(wParam) == BN_CLICKED) {
                ShellExecute(hWnd, TEXT("open"),
                    TEXT("https://www.cnblogs.com/learn-my-life/"),
                    TEXT(""), TEXT(""), SW_SHOWNORMAL);
            }
            break;
    }
    break;

按鈕點擊訊息由父視窗處理。完整代碼稍後上傳。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved