windwos资源操作1

1

设置图标

首先添加一个图标资源

2

3

可以导入 也可以新建 这里就新建好了

随便画画 点击保存

4

保存之后资源文件夹里面会多出两个文件

5

先暂时不用管 继续操作

先要用到LoadIcon()函数 可以按F1进行查看详细信息

1
2
3
4
HICON LoadIconA(
HINSTANCE hInstance,
LPCSTR lpIconName
);

参数

hInstance

类型:HINSTANCE

模块实例的句柄,其可执行文件包含要加载的图标。加载标准图标时,此参数必须为NULL

lpIconName

类型:LPCTSTR

要加载的图标资源的名称。或者,该参数可以在低位字中包含资源标识符,在高位字中包含零。使用MAKEINTRESOURCE宏创建此值。

返回值

类型:HICON

如果函数成功,则返回值是新加载图标的句柄。

如果函数失败,则返回值为NULL。要获取扩展错误信息,请调用GetLastError

备注

LoadIcon仅在未加载的情况下加载图标资源;否则,它检索现有资源的句柄。该函数在图标资源中搜索最适合当前显示的图标。图标资源可以是彩色或单色位图。

LoadIcon只能加载其大小符合一个图标SM_CXICONSM_CYICON系统指标值。使用LoadImage函数加载其他尺寸的图标。

LoadIcon第二个参数可以在头文件里面看见

6

但是光直接写还不行 还是会报错 因为图片ID 实际上的值是整形的 而IDI_ICON1 是LPCWSTR形的 所以需要强转

7

8

可以用F12查看一下MAKEINTRESOURCE

相当于这个宏的作用也是进行强转

9

这样写也是可以的

10

然后设置图标

11

试验一下

12

成功变化

13

也可以在创建的时候直接改变图标的样子

14

15

设置鼠标样式

先导入一个鼠标的光标资源

操作和上面一样

16

然后保存

17

方式也都和上面的基本类似只是函数改了一下

18

19

20

同样也可以创建窗口的时候就改变鼠标

21

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include<Windows.h>
#include<iostream>
#include<CommCtrl.h>
#include"resource.h"
LRESULT CALLBACK WindowProc( //消息处理函数
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
) {
static HINSTANCE hInstance = GetModuleHandleW(NULL);
switch (uMsg)
{
case WM_CREATE:
//MessageBoxW(hwnd, L"窗口创建了", L"提示", MB_OK);
//添加控件
CreateWindowW(WC_BUTTON, L"移动窗口", WS_CHILD | WS_VISIBLE, 10, 10, 120, 40, hwnd, (HMENU)0x100, hInstance, 0);
CreateWindowW(WC_BUTTON, L"获取文本框内容", WS_CHILD | WS_VISIBLE, 10, 60, 120, 40, hwnd, (HMENU)0x101, hInstance, 0);
CreateWindowW(WC_BUTTON, L"设置文本框内容", WS_CHILD | WS_VISIBLE, 10, 110, 120, 40, hwnd, (HMENU)0x102, hInstance, 0);
CreateWindowW(WC_BUTTON, L"设置父窗口", WS_CHILD | WS_VISIBLE, 10, 160, 120, 40, hwnd, (HMENU)0x103, hInstance, 0);
CreateWindowW(WC_EDIT, L"文本框内容", WS_CHILD | WS_BORDER | WS_VISIBLE, 10, 320, 320, 80, hwnd, (HMENU)0x104, hInstance, 0);
CreateWindowW(WC_BUTTON, L"设置ICON", WS_CHILD | WS_VISIBLE, 10, 220, 120, 40, hwnd, (HMENU)0x105, hInstance, 0);
CreateWindowW(WC_BUTTON, L"设置鼠标", WS_CHILD | WS_VISIBLE, 10, 420, 120, 40, hwnd, (HMENU)0x106, hInstance, 0);
break;
case WM_CLOSE:
MessageBoxW(hwnd, L"窗口关闭了", L"提示", MB_OK);
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
case WM_COMMAND:
{
WORD ControlId = LOWORD(wParam);
switch (ControlId)
{
case 0x100:
{
RECT rect{ 0 };
GetClientRect(hwnd, &rect);
int x = rand() % (rect.right - 120);
int y = rand() % (rect.bottom - 40);
MoveWindow((HWND)lParam, x, y, 120, 40, TRUE);
break;
}
case 0x101:
{
WCHAR buff[100]{ 0 };
HWND hedit = GetDlgItem(hwnd, 0x104);
GetWindowTextW(hedit, buff, 100);
MessageBoxW(hwnd, buff, L"提示", MB_OK);
break;
}
case 0x102:
{
/*HWND hedit = GetDlgItem(hwnd, 0x104);
SetWindowTextW(hedit,0x104,L"SetWindowTextW");*/
SetDlgItemTextW(hwnd, 0x104, L"SetDlgItemTextW");
break;
}
case 0x103:
{
HWND hnote = FindWindowW(NULL, L"无标题 - 记事本");
SetParent((HWND)lParam, hnote);
break;
}
case 0x105:
{
//LPCWSTR
//MAKEINTRESOURCE
//LoadIcon(hInstance, (LPCWSTR)IDI_ICON1);
HICON hicon=LoadIcon(hInstance, MAKEINTRESOURCEW(IDI_ICON1));
SetClassLongW(hwnd,GCL_HICON,(LONG)hicon);
break;
}
case 0x106:
{

HCURSOR hcursor = LoadCursorW(hInstance, MAKEINTRESOURCEW(IDC_CURSOR1));
SetClassLongW(hwnd, GCL_HCURSOR, (LONG)hcursor);
break;
}
}
break;

}
default:
break;
}
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPreInstance,
LPSTR lpCmdeLine,
int nCmdShow
)
{
//1.创建一个窗口类
WNDCLASSW myClass = { 0 };
myClass.lpszClassName = L"51hook";
myClass.lpfnWndProc = WindowProc;
myClass.hbrBackground = CreateSolidBrush(RGB(255, 255, 255));
//myClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));//设置图标
myClass.hCursor= LoadCursorW(hInstance, MAKEINTRESOURCEW(IDC_CURSOR1));
//2.注册窗口类
RegisterClassW(&myClass);
//3.创建窗口
HWND hwindow = CreateWindowW(
myClass.lpszClassName,
L"51hook",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
0
);
//4.显示窗口
ShowWindow(hwindow, SW_SHOWNORMAL);

//5.获取消息
MSG msg = { 0 };
while (GetMessageW(&msg, 0, 0, 0)) {
DispatchMessageW(&msg);//分发消息给消息处理函数
}

return 0;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!