1.设计窗口
//1、设计窗口
WNDCLASS winclass;
winclass.cbClsExtra = 0;//类的额外内存
winclass.cbWndExtra = 0;//窗口的的附加内存(额外)
winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景
winclass.hCursor = LoadCursor(NULL,IDC_HAND);//设置光标,若第一个参数为null,表示使用系统提供的光标。
winclass.hIcon = LoadIcon(NULL,IDI_ERROR);//设置图表
winclass.hInstance = hInstance; //应用程序的实例句柄,传入winmain的形参
winclass.lpfnWndProc = WindowProc; //窗口过程的函数(回调函数)
winclass.lpszClassName = TEXT("WIN");//指定窗口类名称TEXT字符串
winclass.lpszMenuName = NULL;//菜单名称
winclass.style = 0;//显示风格,0代表默认
2.注册窗口
//2、注册窗口类
RegisterClass(&winclass);
3.创建窗口
//3、创建窗口
/*
lpClassName,类名
lpWindowName, 标题名
dwStyle,WS风格
x, 显示坐标
y,\
nWidth, 宽高
nHeight,
hWndParent,父窗口
hMenu,菜单NULL
hInstance,实例句柄
lpParam附加值 鼠标附加值NULL
*/
HWND hwnd = CreateWindow(winclass.lpszClassName,
TEXT("WINDOWS"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
4.显示和更新
//4、显示和更新
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
5.通过循环取消息
//5、通过循环取消息
/*
HWND hwnd;主窗口句柄
UINT message;具体消息名称
WPARAM wParam;附加消息 键盘消息
LPARAM lParam;附加消息 鼠标消息
DWORD time;消息产生时间
POINT pt;附加消息 鼠标消息 下X,Y
*/
MSG msg;
while (1)
{
//GetMessageW(
// _Out_ LPMSG lpMsg,消息
// _In_opt_ HWND hWnd,捕获窗口 用NULL代表捕获所有的窗口
// _In_ UINT wMsgFilterMin, //最大和最小的消息一般填入0
// _In_ UINT wMsgFilterMax);//代表捕获所有的消息
if (GetMessage(&msg,NULL,0,0) == FALSE)
{
break;
}
//翻译消息
TranslateMessage(&msg);
//分发消息
DispatchMessage(&msg);
}
6.处理消息(窗口过程)
//处理窗口过程
LRESULT CALLBACK WindowProc(
HWND hwnd,//消息所属窗口句柄
UINT uMsg,//具体的消息名称 WM_XXX为消息名
WPARAM wParam,//键盘附加消息
LPARAM lParam//鼠标附加消息
)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hwnd);//发送另一个消息 WM_DESTROY
case WM_DESTROY:
PostQuitMessage(0);//使得GetMessage==false
case WM_LBUTTONDOWN://鼠标左键按下返回点击坐标
{
int xPos = LOWORD(lParam);
int yPos = HIWORD(lParam);
char buf[1024];
wsprintf(buf,TEXT("x = %d,y = %d"), xPos, yPos);
MessageBox(hwnd, buf, TEXT("鼠标左键按下"), MB_OK);
break;
}
case WM_KEYDOWN:
MessageBox(hwnd, TEXT("bbb"), TEXT("鼠标左键按下"), MB_OK);
break;
case WM_PAINT:
{
PAINTSTRUCT ps;//绘图结构体
HDC hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 100, 100, TEXT("hello"), strlen("hello"));
EndPaint(hwnd,&ps);
break;
}
default:
break;
}
感觉没啥用。
消息映射是一个将消息和成员函数相互关联的表。
即:每一个消息传入到系统中,系统对应每一个不同的消息有不同的处理方式,这个对应关系称为消息映射。
通俗来讲,就是对消息(点击,键盘)的响应机制。
使用 此机制需要在代码中声明
中文字符 一个字符对应多个字节 宽字节 Unicode utf-8 3个字节 GBK 2个字节。
默认unicode为宽字节,(L"aaa")可进行转换。
int num = 0;
char *p = "aaaa";
num = strlen(p);
wchar_t *p2 = L"bbbb";
num = wcslen(p2);
char * p3 = "ccc";
CString = str = CString(p3);
CStringA temp;
temp = str;
char * pp = temp.GetBuffer();
注:单文档,MFC标准
MFC项目创建的过程中,使用基于对话框的编程。
笔记: