Windows编程学习笔记 lesson2 窗口创建
2017-01-25 13:34
375 查看
窗口
窗口是windows操作系统应用程序的重要元素,是系统和用户交互的接口。窗口中一般包括: 标题栏,菜单,最小化框,客户区
窗口句柄
窗口被创建后会返回一个句柄来标识该窗口(窗口的id)Windows程序消息机制
windows程序是基于事件驱动的程序设计windows程序和操作系统的通信都是通过消息来完成,用户有某个动作,操作系统捕获了这个动作,构造一个消息(MSG结构体)加入应用程序中(应用程序的消息队列),应用程序不停地(死循环)从这个消息队列中拿出消息来处理
消息队列:
每个应用程序都有一个消息队列,
程序中的事件都是以一个消息的形式存在被放在消息队列中,程序要通过循环不停地从消息队列中取消息进行相应响应操作
Windows 窗口创建
设计窗口类、注册窗口类创建窗口、显示窗口、更新窗口
消息循环
消息处理
消息循环:
程序要一直运行,必定有死循环(只有当程序退出才结束)Windows程序中就是要实现消息循环让程序一直运行
#include <Windows.h>
#include <tchar.h>
//设计窗口类,注册窗口类
void RegisterWndClass();
//窗口过程函数,回调函数,处理消息的
LRESULT CALLBACK MyWndProcFunc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInstance = NULL;
/*
0000 0000 1字节
#define MAX_BOX 0000 0001 定义窗口最大化属性
#defein CLOSE_BOX 0000 0010
style= MAX_BOX | CLOSE_BOX ;0000 0011 有两个属性
style = style & ~MAX_BOX ; 去掉属性
回调函数: 系统自己调用
*/
int WINAPI _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nShowCmd)
{
g_hInstance = hInstance;
//1.设计窗口类,注册窗口类
RegisterWndClass();
//创建窗口
HWND hWnd = CreateWindow(_T("MyWndClass"), _T("wnd"), WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME, 700, 200, 800, 600, NULL, NULL, g_hInstance, NULL);
if (hWnd == NULL)
{
int err = GetLastError();
MessageBox(NULL, _T("窗口创建失败"), _T("错误"), MB_OK);
return 0;
}
//显示更新窗口
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
//消息循环
MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0))//从消息队列中取消息,如果消息队列中没有消息,就一直在这里阻塞,如果获得了WM_QUIT消息,程序返回false
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 1;
}
void RegisterWndClass()
{
//设计窗口类
WNDCLASSEX wndClass;
wndClass.cbClsExtra = 0;//指定紧跟在窗口类结构后的附加字节数,一般初始为0
wndClass.cbSize = sizeof(WNDCLASSEX);//WNDCLASSEX 的大小。
wndClass.cbWndExtra = 0; //指定紧跟在窗口实例的附加字节数。默认为0
wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//背景画刷的句柄。
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);//光标的句柄。
wndClass.hIcon = NULL;//图标的句柄。
wndClass.hIconSm = NULL;//和窗口类关联的小图标。如果该值为NULL。则把hIcon中的图标转换成大小合适的小图标。
wndClass.hInstance = g_hInstance;//本模块的实例句柄。
wndClass.lpfnWndProc = MyWndProcFunc;//窗口处理函数的指针
wndClass.lpszClassName = _T("MyWndClass");//指向类名称的指针
wndClass.lpszMenuName = NULL;//指向菜单的指针
wndClass.style = CS_HREDRAW | CS_VREDRAW; //从这个窗口类派生的窗口具有的风格
//注册窗口类
RegisterClassEx(&wndClass);
}
LRESULT CALLBACK MyWndProcFunc(HWND hWnd, UINT msgType, WPARAM wParam, LPARAM lParam)
{
switch (msgType)
{
case WM_CREATE:
MessageBox(hWnd, L"创建窗口", L"提示", MB_OK);
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostMessage(hWnd, WM_QUIT, NULL, NULL);
break;
default:
return DefWindowProc(hWnd, msgType, wParam, lParam);
break;
}
return 0;
}
相关文章推荐
- Windows编程学习笔记 lesson3 窗口创建
- windows编程学习笔记(1)创建窗口与消息循环
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用
- 【Windows编程】笔记-添加音效与窗口创建
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用
- Windows编程学习笔记 lesson1 windows编程初解、数据类型
- 雅阁学习笔记之windows编程——保存文件和打开浏览文件夹窗口
- MFC学习笔记之:MFC最基本动作(如创建窗口,点击取消等)函数的执行顺序
- 汇编语言学习笔记-创建最基本的windows窗体
- Java6学习笔记55——多线程编程——线程的创建方法1
- D3D学习笔记之一---创建D3D环境的窗口
- DotNet Windows编程学习笔记【一】
- 创建一个windows窗体--学习笔记一
- Windows 程序设计学习笔记(三):第一个窗口
- [学习笔记]Windows窗口概念汇总(转载)
- Windows编程学习笔记(九)
- Windows编程学习笔记(八)
- Windows核心编程学习笔记----第二章 UNICODE
- Windows编程学习笔记(七)
- [原创] MicroWindows学习笔记之窗口管理与Z序关系