WIN32 控件基础
程序员文章站
2024-03-01 12:54:58
...
首先我们看下如下界面:
上面有一个弹窗,有两个控件,每个控件他们都是一个Window
实例。
我们首先看下点击事件的交互代码:
//这是控件所在弹窗的事件过程函数
INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) {
//窗口关闭
if (WM_CLOSE==msgType)
{
EndDialog(hwnd, 0);
return TRUE;
}
//WM_COMMAND 有三种情况 快捷键 菜单 控件信息.具体请参考官网文档
else if (WM_COMMAND==msgType)
{
//这里直接判断为控件类型即可
//高字为 控件的事件比如BN_CLICKED为点击事件
WORD hWord = HIWORD(wparam);
//低字为为控件id
WORD lWord= LOWORD(wparam);
//如果控件id为IDC_BUTTON1且事件类型为点击事件
if (lWord== IDC_BUTTON1 && hWord==BN_CLICKED)
{
OutputDebugStringA("IDC_BUTTON1 \r\n");
}
//概念同上
else if (lWord== IDC_CHECK1 && hWord == BN_CLICKED)
{
//得到当前控件对应的窗口实例(每个控件都是窗口实例)
HWND child = GetDlgItem(hwnd, IDC_BUTTON1);
//模拟发送一个点击事件给IDC_BUTTON1
SendMessageA(child, BM_CLICK, 0, 0);
OutputDebugStringA("IDC_CHECK1 \r\n");
}
return TRUE;
}
return FALSE;
}
上面的代码寓意:id
为IDC_BUTTON1
的控件触发点击事件后打印输出语句"IDC_BUTTON1 \r\n"
id
为IDC_CHECK1
的控件触发点击事件后 手动发出一个点击事件给IDC_BUTTON1
控件
我们看下另一个案例 按下按钮获取文本编辑框内容:
方式一:
INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) {
if (WM_CLOSE==msgType)
{
EndDialog(hwnd, 0);
return TRUE;
}
else if (WM_COMMAND==msgType)
{
WORD hWord = HIWORD(wparam);
WORD lWord= LOWORD(wparam);
if (lWord== IDC_BTN_GET_MSG && hWord==BN_CLICKED)
{
TCHAR tchar[30];
HWND child = GetDlgItem(hwnd, IDC_EDIT1);
//这个函数本质发送一个消息给系统,系统会把字符串赋值到tachr
SendDlgItemMessageA(hwnd, IDC_EDIT1, WM_GETTEXT, sizeof(tchar), (LPARAM)tchar);
OutputDebugStringA("IDC_BUTTON1 \r\n");
MessageBoxA(hwnd, tchar, "", MB_OK);
}
return TRUE;
}
return FALSE;
}
方式二:
INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) {
if (WM_CLOSE==msgType)
{
EndDialog(hwnd, 0);
return TRUE;
}
else if (WM_COMMAND==msgType)
{
WORD hWord = HIWORD(wparam);
WORD lWord= LOWORD(wparam);
if (lWord== IDC_BTN_GET_MSG && hWord==BN_CLICKED)
{
TCHAR tachr[30];
HWND child = GetDlgItem(hwnd, IDC_EDIT1);
//这个函数本质发送一个消息给系统,系统会把字符串赋值到tachr
GetWindowTextA(child, tachr, sizeof(tachr));
OutputDebugStringA("IDC_BUTTON1 \r\n");
MessageBoxA(hwnd, tachr, "", MB_OK);
}
return TRUE;
}
return FALSE;
}