設置 | 登錄 | 註冊

作者共發了14篇帖子。

【案例】給Win32程序的「關於」對話框添加一個按鈕

11樓 巨大八爪鱼 2015-12-1 22:35
修改OK按鈕上的文字:
HWND okbtn = GetDlgItem(hDlg, IDOK); // 獲取OK按鈕
SendMessage(okbtn, WM_SETTEXT, NULL, (LPARAM)L"Click me");

獲取一個複選框是否被選中:
HWND checkbox = GetDlgItem(hDlg, IDC_CHECK1);
int checked = SendMessage(checkbox, BM_GETCHECK, NULL, NULL);
if (checked)
{
  //選中了
}

禁用按鈕:
EnableWindow(okbtn, false);
12樓 巨大八爪鱼 2015-12-1 22:41
啟用XP風格控件後:
(啟用方法請參閱:https://zh.arslanbar.net/post.php?t=22016)

13樓 巨大八爪鱼 2015-12-1 22:42
回復:12樓
程序:
// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    static int counter = 0;
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        else if (LOWORD(wParam) == IDC_BUTTON1)
        {
            wchar_t msg[30];
            wsprintf(msg, L"Hello World!\nCounter: %d", counter);
            MessageBox(hDlg, msg, L"Hello", MB_ICONINFORMATION);
            SendMessage((HWND)lParam, WM_SETTEXT, NULL, (LPARAM)L"Checked");

            HWND okbtn = GetDlgItem(hDlg, IDOK); // get OK button
            SendMessage(okbtn, WM_SETTEXT, NULL, (LPARAM)L"Click me");

            HWND checkbox = GetDlgItem(hDlg, IDC_CHECK1);
            int checked = SendMessage(checkbox, BM_GETCHECK, NULL, NULL);
            EnableWindow(okbtn, !checked);
        }
        break;
    case WM_LBUTTONUP:
        counter++;
        break;
    }
    return (INT_PTR)FALSE;
}


14樓 巨大八爪鱼 2015-12-1 22:43
關於wchar_t寬字符數組的用法,請參閱:
https://zh.arslanbar.net/post.php?t=23331
(適合已經學過char字符數組和char *字符串指針的讀者)

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。