逆向学习-windwos资源操作1
设置图标
首先添加一个图标资源
可以导入 也可以新建 这里就新建好了
随便画画 点击保存
保存之后资源文件夹里面会多出两个文件
先暂时不用管 继续操作
先要用到LoadIcon()函数 可以按F1进行查看详细信息
HICON LoadIconA(
HINSTANCE hInstance,
LPCSTR lpIconName
);
参数
hInstance
类型:HINSTANCE
模块实例的句柄,其可执行文件包含要加载的图标。加载标准图标时,此参数必须为NULL。
lpIconName
类型:LPCTSTR
要加载的图标资源的名称。或者,该参数可以在低位字中包含资源标识符,在高位字中包含零。使用宏创建此值。
返回值
类型:HICON
如果函数成功,则返回值是新加载图标的句柄。
如果函数失败,则返回值为NULL。要获取扩展错误信息,请调用。
备注
LoadIcon仅在未加载的情况下加载图标资源;否则,它检索现有资源的句柄。该函数在图标资源中搜索最适合当前显示的图标。图标资源可以是彩色或单色位图。
LoadIcon只能加载其大小符合一个图标SM_CXICON和SM_CYICON系统指标值。使用函数加载其他尺寸的图标。
LoadIcon第二个参数可以在头文件里面看见
但是光直接写还不行 还是会报错 因为图片ID 实际上的值是整形的 而IDI_ICON1 是LPCWSTR形的 所以需要强转
可以用F12查看一下MAKEINTRESOURCE
相当于这个宏的作用也是进行强转
这样写也是可以的
然后设置图标
试验一下
成功变化
也可以在创建的时候直接改变图标的样子
设置鼠标样式
先导入一个鼠标的光标资源
操作和上面一样
然后保存
方式也都和上面的基本类似只是函数改了一下
同样也可以创建窗口的时候就改变鼠标
#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;
}
- 点赞
- 收藏
- 关注作者
评论(0)