1. #include <Windows.h>
    2. #include <windowsx.h>
    3. #include "resource.h"
    4. // 对于图片控件,本质上也是一个静态控件,只不过具备特殊的样式 SS_BITMAP,
    5. // 通过在工具栏找到图片控件,设置控件的风格为 BitMap 就可以创建,需要注
    6. // 意的是,使用的 bmp 图片必须是有效的格式,否则不会有内容显示
    7. // 对话框的回调函数,消息处理了返回 TRUE,没有处理返回 FALSE
    8. INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    9. {
    10. switch (uMsg)
    11. {
    12. // 当用户点击了关闭按钮时产生的消息,对话框要求必须使用 EndDialog 退出
    13. case WM_CLOSE:
    14. {
    15. EndDialog(hDlg, 0);
    16. break;
    17. }
    18. // 对于标准控件,例如按钮,应该使用 WM_COMMAND 进行响应
    19. case WM_COMMAND:
    20. {
    21. // 如果当前操作的是组合框控件,就执行下面的语句
    22. if (LOWORD(wParam) == IDC_COMBO1)
    23. {
    24. // 通过 HIWORD(wParam) 获取通知码,筛选具体的行为,通过 url
    25. // https://docs.microsoft.com/zh-cn/windows/win32/controls/combo-boxes
    26. // 可以查看到所有控件的基本操作形式(消息\函数\通知码\风格等)
    27. if (HIWORD(wParam) == CBN_SELCHANGE)
    28. {
    29. // 获取当前选中的是哪一个选项,找到合适的图片进行替换
    30. int index = ComboBox_GetCurSel((HWND)lParam);
    31. // 通过 LoadBitmap 加载想要加载的位图
    32. HBITMAP hBitmap = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1 + index));
    33. // 通过发送消息的形式,将图片设置到控件上,注意修改静态控件的 id
    34. SendDlgItemMessage(hDlg, IDC_STATIC1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);
    35. }
    36. }
    37. break;
    38. }
    39. // 对话框的初始化消息是 WM_INITDIALOG,常用于进行控件的初始化
    40. case WM_INITDIALOG:
    41. {
    42. // 1. 因为要操作组合框控件,所以要先获取句柄
    43. HWND hComobo = GetDlgItem(hDlg, IDC_COMBO1);
    44. // 2. 为组合框添加字符串项
    45. ComboBox_AddString(hComobo, L"图片[A]");
    46. ComboBox_AddString(hComobo, L"图片[B]");
    47. // 3. 设置默认的选中项
    48. ComboBox_SetCurSel(hComobo, 0);
    49. ComboBox_SelectString(hComobo, 0, L"图片[A]");
    50. break;
    51. }
    52. default:
    53. {
    54. return FALSE;
    55. }
    56. }
    57. return TRUE;
    58. }
    59. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    60. {
    61. // 1. 是实例句柄,用于标识资源所在的位置
    62. // 2. 资源的ID,大多数时候会使用 MAKEINTRESOURCE 进行转换
    63. // 3. 对话框的父窗口,NULL 表示桌面
    64. // 4. 回调函数,用于响应对话框产生的所有消息
    65. DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
    66. return 0;
    67. }

    image.pngimage.png