Windows核心编程(6)

1.Windows资源

1.图标资源
· 添加资源
注意图标的大小,一个图标文件中,可以有多个不同大小的图标。

· 加载

HICON LoadIcon(
HINSTANCE hInstance,
LPCTSTR lpIconName
);//成功后返回HICON句柄

· 设置:注册窗口类
资源

在这里插入图片描述
在这里插入图片描述重画了16x16和32x32图标后保存
在这里插入图片描述在注册窗口类中,挂上图标

  wc.hIcon = LoadIcon(hInstance,(LPCWSTR)IDI_ICON1);//默认图标

在这里插入图片描述在这里插入图片描述

2.光标资源

· 添加光标的资源
光标的大小默认是32x32像素,每个光标有HotSpot,是当前鼠标的热点

· 加载资源
HCURSOR LoadCursor(
HINSTANCE hInstance,
LPCTSTR lpCursorName
);//可以为NULL,获取系统默认的Cursor

· 设置资源
在注册窗口是,设置光标
使用SetCursor设置光标

资源管理器添加光标资源
在这里插入图片描述
在这里插入图片描述
左上角选择作用点,也就是光标图案真正能点击的作用域,不设置的话默认是图标左上角

 wc.hCursor = LoadCursor(hInstance,(LPCWSTR)IDC_CURSOR1);//默认光标

在注册窗口类中挂上光标资源

在这里插入图片描述

在这里插入图片描述
另一种挂光标资源的方式:

HCURSOR SetCursor(
HCURSOR hCursor//光标句柄
)

WM_SETCURSOR消息参数
wPARAM - 当前使用的光标句柄
lPARAM - LOWORD 当前区域的代码(Hit - Test code)
HTCLIENT/HTCAPTION
HIWORD - 当前鼠标消息ID

SetCursor()函数必须在WM_SETCURSOR消息中调用

case WM_SETCURSOR:
    {
        HCURSOR hCur = LoadCursor(G_HINS, (LPCWSTR)IDC_CURSOR1);
        SetCursor(hCur);
        return 0;
    }

3.字符串资源

1.添加字符串资源
添加字符串表,在表中增加字符串
在这里插入图片描述可以自定义ID和字符串内容,我输入了两个中文字符串,一个是窗口,一个是帮助,并且修改了它们的id

2.在窗口中挂上字符串资源

int LoadString(
HINSTANCE hInstance,
UINT uID,//字符串ID
LPTSTR lpBuffer,//存放字符串BUFF
int nBufferMax//字符串BUFF长度
)
 wchar_t TEXT[256] = {0};
    LoadString(hInstance,IDS_help, TEXT, 256);
    HWND hwnd = CreateWindow((LPCWSTR)L"main", TEXT, WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hInstance, NULL);

在这里插入图片描述

4.加速键资源

· 添加 资源添加加速键表,增加命令ID对应的加速键
在这里插入图片描述
在这里插入图片描述添加了两个加速键,并修改了ID和修饰以及键符

· 使用

//加载加速键表
HACCEL LoadAccelerators(
HINSTANCE hInstance,
LPCTSTR lpTableName
)
//翻译加速键
int TranslateAccelerator(
HWND hWnd,//处理消息的窗口句柄
HACCEL hAccTable,//加速键句柄
LPMSG lpMsg//消息
)//如果不是加速键,返回零

TranslateAccelerator在加速键表中找到对应键值(例如:Ctrl+M)会发送一个WM_COMMAND消息

在消息循环中翻译处理:

  HACCEL hacc = LoadAccelerators(hInstance, (PCWSTR)IDR_ACCELERATOR1);
    while (GetMessage(&nMSG, NULL, 0, 0))
    {
        if(!TranslateAccelerator(hwnd, hacc, &nMSG));
        {
            TranslateMessage(&nMSG);
            DispatchMessage(&nMSG);//派发消息,将消息交给窗口处理函数处理
        }
    }

由于加速键的ID (ID_NEW\ID_OUT)和菜单的中新建和退出的ID是一样的,即绑定了,所以在摁下加速键以后应该会产生同样的效果。

LRESULT CALLBACK test(HWND hwnd, UINT msgID, WPARAM wParam, LPARAM lParam)
{
    switch (msgID)
    {
    case WM_SETCURSOR:
    {
        HCURSOR hCur = LoadCursor(G_HINS, (LPCWSTR)IDC_CURSOR1);
        SetCursor(hCur);
        return 0;
    }
    
        break;
    case WM_COMMAND:
        ON_COM(hwnd, wParam);
        break;
    case WM_CONTEXTMENU:
        ON_CONTEXT(hwnd, lParam);
        break;
    }
    return DefWindowProc(hwnd, msgID, wParam, lParam);
}

void  ON_COM(HWND hwnd, WPARAM wParam)
{
    switch (LOWORD(wParam))
    {
    case ID_OUT:
        if (MessageBox(hwnd, L"是否关闭?", L"infor", MB_OKCANCEL | MB_ICONEXCLAMATION) == IDOK)
        {
            PostQuitMessage(0);
        }
        break;
    case ID_NEW:
        MessageBox(hwnd, L"新建了", L"infor", MB_OK);
        break;
    }
  
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值