Win32怎么显示多个图像并且响应图像点击事件?

末影小末EnderMo 末影小末EnderMo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
二话不说,把完整代码放出来
#include "framework.h"
#include "FrameworkUI.h"
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#define IDC_2 1002
#define IDC_3 2002
#define IDC_CLOSE 233
#define IDC_MINIMIZE 2233

HINSTANCE g_hInstance;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK BtnProc2(HWND, UINT, WPARAM, LPARAM);//按钮2窗口过程

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// TODO: Place code here.
g_hInstance = hInstance;
TCHAR className[] = TEXT("my class");
TCHAR szBtnName2[] = TEXT("MyBtn2");
WNDCLASS wndclass = { 0 };
wndclass.hInstance = hInstance;
wndclass.hbrBackground = (CreateSolidBrush(RGB(30,30,30)));
wndclass.lpszClassName = className;
wndclass.lpfnWndProc = WindowProc;
wndclass.hIcon = LoadIcon(NULL,MAKEINTRESOURCE(IDI_SMALL));

RegisterClass(&wndclass);

HWND hMain = CreateWindow(className, "FrameworkUI", WS_OVERLAPPEDWINDOW, 300, 300, 400, 300, NULL, NULL, hInstance, NULL);

if (!hMain)
{
OutputDebugString("=),");
return 0;
}

ShowWindow(hMain, SW_SHOW);
WNDCLASS wndbtn2 = { 0 };
wndbtn2.cbClsExtra = 0;
wndbtn2.cbWndExtra = 0;
wndbtn2.hbrBackground = CreateSolidBrush(RGB(104, 104, 104));
wndbtn2.hCursor = NULL;
wndbtn2.hIcon = NULL;
wndbtn2.hInstance = hInstance;
wndbtn2.lpfnWndProc = BtnProc2;
wndbtn2.lpszClassName = szBtnName2;
wndbtn2.lpszMenuName = NULL;
wndbtn2.style = CS_HREDRAW | CS_VREDRAW;

if (!RegisterClass(&wndbtn2))
{
MessageBox(NULL, TEXT("RegisterClass wndbtn failed"), TEXT("ERROR"), 0);
return 0;
}
HWND hButton2 = CreateWindow(szBtnName2, TEXT("MyButton2"),
WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hMain, NULL, hInstance, 0);
ShowWindow(hButton2, SW_SHOW);
UpdateWindow(hButton2);

MSG msg;
BOOL ret;
while (ret = GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}
//主窗口过程 PROC
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HFONT hFont;//定义静态字体变量
static HWND close;
static HWND MINIMIZE;
static HWND txt1;
static HWND txt2;
static HWND bt1;
char txt[40];
HDC hdc;
HDC hdcMem;

PAINTSTRUCT ps;
HINSTANCE hInstance;
BITMAP bitmap;

static HBITMAP hBitmap; // 1 静态变量

static int bmWidth, bmHeight; // 2 静态变量

switch (uMsg)
{
case WM_CREATE:
{
hInstance = ((LPCREATESTRUCT)lParam)->hInstance; // 3
hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); // 4
GetObject(hBitmap, sizeof(BITMAP), &bitmap); // 5
bmWidth = bitmap.bmWidth; // 6
bmHeight = bitmap.bmHeight;
hFont = CreateFont(14, 7, 0, 0, 0, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Minecraft");//创建字体
txt1 = CreateWindow("STATIC", "FrameworkUI", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 10, 10, 120, 20, hwnd, (HMENU)IDC_2, g_hInstance, NULL);//创建静态文本
SendMessage(txt1, WM_SETFONT, (WPARAM)hFont, TRUE);//发送设置字体消息
break;
}
case WM_PAINT:

hdc = BeginPaint(hwnd, &ps); // 8

hdcMem = CreateCompatibleDC(hdc); // 9

SelectObject(hdcMem, hBitmap); // 10

BitBlt(hdc, 375, 5, bmWidth, bmHeight, hdcMem, 0, 0, SRCCOPY); // 11 显示位图

DeleteDC(hdcMem); // 12

EndPaint(hwnd, &ps); // 13

break;
case WM_CTLCOLORSTATIC://拦截WM_CTLCOLORSTATIC消息
{

if ((HWND)lParam == GetDlgItem(hwnd, IDC_2))//2
{
SetTextColor((HDC)wParam, RGB(165, 120, 120));
SetBkMode((HDC)wParam, TRANSPARENT);
}
if ((HWND)lParam == GetDlgItem(hwnd, IDC_CLOSE))//2
{
SetTextColor((HDC)wParam, RGB(199, 0, 0));
SetBkMode((HDC)wParam, TRANSPARENT);
}
if ((HWND)lParam == GetDlgItem(hwnd, IDC_MINIMIZE))//2
{
SetTextColor((HDC)wParam, RGB(199, 0, 0));
SetBkMode((HDC)wParam, TRANSPARENT);
}
return (INT_PTR)GetStockObject((NULL_BRUSH));//返回一个空画刷(必须)
}
case WM_SIZE:
{
LONG_PTR Style = ::GetWindowLongPtr(hwnd, GWL_STYLE);
Style = Style & ~WS_CAPTION & ~WS_SYSMENU & ~WS_SIZEBOX;
::SetWindowLongPtr(hwnd, GWL_STYLE, Style);
break;
}
case WM_LBUTTONDOWN:
{
SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0); //向窗口发送WM_NCLBUTTONDOWN消息,HTCAPTION 标题
break;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_2:
MessageBox(hwnd, "标题栏的消息响应(这明明是静态文本)xD", "提示", MB_OK | MB_ICONINFORMATION);
break;
case IDC_3:
MessageBox(hwnd, "您点击了按钮。(我需要告诉你你做了什么)", "提示", MB_OK | MB_ICONINFORMATION);
break;
case IDB_BITMAP1:
{
case WM_DESTROY:
{
DeleteObject(hBitmap); // 14
DeleteObject(hFont);//删除所创建字体对象
PostQuitMessage(0);
break;
}
}
case IDC_MINIMIZE:
{
SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); // 最小化
break;
}
break;
}
break;
}
}

return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
//子窗口过程
LRESULT CALLBACK BtnProc2(HWND hBtn2, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps = { 0 };
HDC DC = NULL;
switch (message)
{
case WM_CREATE:
{
MoveWindow(hBtn2, 30, 50, 250, 100, TRUE);
//画椭圆区域,还可以画圆角,多边形等等
HRGN hRgn = CreateRoundRectRgn(10, 10, 600, 50, 0, 10);
SetWindowRgn(hBtn2, hRgn, TRUE);
}
break;
case WM_LBUTTONDOWN:
MessageBox(NULL, TEXT("MyButton2"), TEXT("提示"), 0);
break;
case WM_PAINT:
{
DC = BeginPaint(hBtn2, &ps);
SetBkColor(DC, RGB(104, 104, 104)); //按钮背景颜色
SetTextColor(DC, RGB(210, 210, 210)); //按钮上的文字颜色
TextOut(DC, 20, 19, _T("BUTTON"), 10); //按钮上的文字
EndPaint(hBtn2, &ps);
}
break;
default:
break;
}
return DefWindowProc(hBtn2, message, wParam, lParam);

}

IDB_BITMAP1就是要响应关闭时间的位图,单击IDB_BITMAP1的时候关闭程序,并且想要显示多个图片;
如图,给IDB_BITMAP1加一个事件,再多显示几个图片
...全文

相关推荐

评论 39
收藏 已收藏
分享
返回顶部
末影小末EnderMo
界面 15,976 成员 115,866 内容