学习笔记day71-----Win32-编码类型、窗口函数框架

编码类型
多字节编码:
目前市场主流使用的还是多字节编码字符集。
多字节编码字符集,对于不同的字符集,所使用的内存空间大小不同,英文单词使用一个字节,汉字使用2个或者三个字节表示。
这种情况下很有可能会出现解析的时候错位,导致乱码
unicode编码:
unico编码字符集,把所有的字符都使用2个字节。可以有效避免错位的问题

vs环境中的字符
在vs中有两种字符类型,单字节的char和双字节的wchar_t。
当使用wchar_t的字符串字面值的时候,需要用L在字符串前声明,告知编译器字符串使用unicode编译
wchar_t szText = L"hello";
在vs中提供了charwchar_t的兼容方法
TCHAR 这是一个条件编译的结果
#ifdef UNICODE
    typedef WCHAR TCHAR,*PTCHAR
    #define _TEXT(quote) L##quote
#else
    tyoedef char TCHAR,*PTCHAR
    #define _TEXT(quote) quote
#endif
所以,当程序有对UNICODE宏定义,那么使用TCHAR类型的时候,使用的就是UNICODE编码
反之,当程序没有定义UNICODE,那么TCHAR代表的就是char类型

窗口程序
一个完整的窗口类型,由以下几个部分组成
1、窗口程序的入口函数WinMain
2、消息处理函数
3、注册窗口类
4、创建窗口
5、显示窗口
6、消息循环
7、消息处理(也就是消息处理函数)

按照上述过程,给以给出一个最基本的窗口程序的框架
-------------
#include <windows.h>
HINSTANCE g_hInstance;
//2、消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) {
    return DefWindowProc(hWnd,message,wParam,lParam);
}
//3、注册窗口类
void Register(LPSTR lpClassName) {
    //有两种窗口类,正常版本和扩展版本,WNDCLASS/WNDCLASSEX
    //扩展版本多了两个成员变量,结构体大小和窗口类小图标
    WNDCLASSEX wec = { 0 };
    wec.cbSize = sizeof(wec);                           //结构体大小
    wec.cbClsExtra = 0;                                 //窗口类附加数据缓存区大小
    wec.cbWndExtra = 0;                                 //窗口附加数据缓存区大小
    wec.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);     //背景刷的颜色
    wec.hCursor = NULL;                                 //鼠标句柄
    wec.hIcon = NULL;                                   //窗口图标句柄
    wec.hIconSm = NULL;                                 //窗口小图标句柄
    wec.hInstance = g_hInstance;                            //当前进程句柄
    wec.lpfnWndProc = WndProc;                          //消息处理函数
    wec.lpszClassName = lpClassName;                    //窗口类名
    wec.lpszMenuName = NULL;                            //菜单
    wec.style = CS_HREDRAW | CS_VREDRAW;                //窗口类风格
    //注册窗口类
    RegisterClassEx(&wec);
}
//4、创建窗口
HWND CreateWind(LPSTR lpClassName,LPSTR lpWindowName) {
    HWND hWnd = CreateWindowEx(0, lpClassName, lpWindowName, WS_OVERLAPPEDWINDOW, 100, 100, 700, 500, NULL, NULL, g_hInstance, NULL);
    return hWnd;
}
//5、显示窗口
void Display(HWND hWnd) {
    ShowWindow(hWnd,SW_SHOW);
    UpdateWindow(hWnd);
}
//6、消息循环
void Message(void) {
    MSG nMsg = { 0 };
    while (GetMessage(&nMsg, NULL, 0, 0)) {
        TranslateMessage(&nMsg);
        DispatchMessage(&nMsg);
    }
}
//1、窗口函数的入口函数
int CALLBACK WinMain(HINSTANCE hInstance ,HINSTANCE prevInstance,LPSTR lpCmdLine,int nComShow) {
    Register("MyClass");
    HWND hWnd = CreateWind("MyClass", "Window");
    Display(hWnd);
    Message();
    return 0;
}
-------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值