WIN32 控件基础

偏执的太偏执、 2022-12-20 11:15 348阅读 0赞

首先我们看下如下界面:
在这里插入图片描述

上面有一个弹窗,有两个控件,每个控件他们都是一个Window实例。

我们首先看下点击事件的交互代码:

  1. //这是控件所在弹窗的事件过程函数
  2. INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) {
  3. //窗口关闭
  4. if (WM_CLOSE==msgType)
  5. {
  6. EndDialog(hwnd, 0);
  7. return TRUE;
  8. }
  9. //WM_COMMAND 有三种情况 快捷键 菜单 控件信息.具体请参考官网文档
  10. else if (WM_COMMAND==msgType)
  11. {
  12. //这里直接判断为控件类型即可
  13. //高字为 控件的事件比如BN_CLICKED为点击事件
  14. WORD hWord = HIWORD(wparam);
  15. //低字为为控件id
  16. WORD lWord= LOWORD(wparam);
  17. //如果控件id为IDC_BUTTON1且事件类型为点击事件
  18. if (lWord== IDC_BUTTON1 && hWord==BN_CLICKED)
  19. {
  20. OutputDebugStringA("IDC_BUTTON1 \r\n");
  21. }
  22. //概念同上
  23. else if (lWord== IDC_CHECK1 && hWord == BN_CLICKED)
  24. {
  25. //得到当前控件对应的窗口实例(每个控件都是窗口实例)
  26. HWND child = GetDlgItem(hwnd, IDC_BUTTON1);
  27. //模拟发送一个点击事件给IDC_BUTTON1
  28. SendMessageA(child, BM_CLICK, 0, 0);
  29. OutputDebugStringA("IDC_CHECK1 \r\n");
  30. }
  31. return TRUE;
  32. }
  33. return FALSE;
  34. }

上面的代码寓意:
idIDC_BUTTON1 的控件触发点击事件后打印输出语句"IDC_BUTTON1 \r\n"
idIDC_CHECK1 的控件触发点击事件后 手动发出一个点击事件给IDC_BUTTON1 控件

我们看下另一个案例 按下按钮获取文本编辑框内容:

在这里插入图片描述

方式一:

  1. INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) {
  2. if (WM_CLOSE==msgType)
  3. {
  4. EndDialog(hwnd, 0);
  5. return TRUE;
  6. }
  7. else if (WM_COMMAND==msgType)
  8. {
  9. WORD hWord = HIWORD(wparam);
  10. WORD lWord= LOWORD(wparam);
  11. if (lWord== IDC_BTN_GET_MSG && hWord==BN_CLICKED)
  12. {
  13. TCHAR tchar[30];
  14. HWND child = GetDlgItem(hwnd, IDC_EDIT1);
  15. //这个函数本质发送一个消息给系统,系统会把字符串赋值到tachr
  16. SendDlgItemMessageA(hwnd, IDC_EDIT1, WM_GETTEXT, sizeof(tchar), (LPARAM)tchar);
  17. OutputDebugStringA("IDC_BUTTON1 \r\n");
  18. MessageBoxA(hwnd, tchar, "", MB_OK);
  19. }
  20. return TRUE;
  21. }
  22. return FALSE;
  23. }

方式二:

  1. INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) {
  2. if (WM_CLOSE==msgType)
  3. {
  4. EndDialog(hwnd, 0);
  5. return TRUE;
  6. }
  7. else if (WM_COMMAND==msgType)
  8. {
  9. WORD hWord = HIWORD(wparam);
  10. WORD lWord= LOWORD(wparam);
  11. if (lWord== IDC_BTN_GET_MSG && hWord==BN_CLICKED)
  12. {
  13. TCHAR tachr[30];
  14. HWND child = GetDlgItem(hwnd, IDC_EDIT1);
  15. //这个函数本质发送一个消息给系统,系统会把字符串赋值到tachr
  16. GetWindowTextA(child, tachr, sizeof(tachr));
  17. OutputDebugStringA("IDC_BUTTON1 \r\n");
  18. MessageBoxA(hwnd, tachr, "", MB_OK);
  19. }
  20. return TRUE;
  21. }
  22. return FALSE;
  23. }

发表评论

表情:
评论列表 (有 0 条评论,348人围观)

还没有评论,来说两句吧...

相关阅读