#include <Windows.h>
#include <windowsx.h>
#include "resource.h"
// 对于图片控件,本质上也是一个静态控件,只不过具备特殊的样式 SS_BITMAP,
// 通过在工具栏找到图片控件,设置控件的风格为 BitMap 就可以创建,需要注
// 意的是,使用的 bmp 图片必须是有效的格式,否则不会有内容显示
// 对话框的回调函数,消息处理了返回 TRUE,没有处理返回 FALSE
INT_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;
}