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

