Settings | Sign in | Sign up

There are currently 14 posts.

【案例】给Win32程序的“关于”对话框添加一个按钮

Floor 11 巨大八爪鱼 12/1/15 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);
Floor 12 巨大八爪鱼 12/1/15 22:41
启用XP风格控件后:
(启用方法请参阅:https://zh.arslanbar.net/post.php?t=22016)

Floor 13 巨大八爪鱼 12/1/15 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;
}


Floor 14 巨大八爪鱼 12/1/15 22:43
关于wchar_t宽字符数组的用法,请参阅:
https://zh.arslanbar.net/post.php?t=23331
(适合已经学过char字符数组和char *字符串指针的读者)

Content converter:

Reply the post
Content:
User: You are currently anonymous.
Captcha:
Unclear? Try another one.