编码类型
多字节编码:
目前市场主流使用的还是多字节编码字符集。
多字节编码字符集,对于不同的字符集,所使用的内存空间大小不同,英文单词使用一个字节,汉字使用2个或者三个字节表示。
这种情况下很有可能会出现解析的时候错位,导致乱码
unicode编码:
unico编码字符集,把所有的字符都使用2个字节。可以有效避免错位的问题
vs环境中的字符
在vs中有两种字符类型,单字节的char和双字节的wchar_t。
当使用wchar_t的字符串字面值的时候,需要用L在字符串前声明,告知编译器字符串使用unicode编译
wchar_t szText = L"hello";
在vs中提供了char和wchar_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;
}
-------------------
学习笔记day71-----Win32-编码类型、窗口函数框架
最新推荐文章于 2025-01-09 13:30:38 发布
本文探讨了多字节编码和Unicode编码的区别,特别是在Visual Studio环境中如何处理不同类型的字符。文章还提供了一个基本的Windows窗口程序框架示例。
1万+

被折叠的 条评论
为什么被折叠?



