我是靠谱客的博主 称心小丸子,最近开发中收集的这篇文章主要介绍Windows编程二之Windows内部运行机制详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 声明:本文主要根据IT学吧 小金鱼的Windows程序设计视频教程而写,原文有许多素材来之视频。


一、Windows内部运行机制详解

Windows操作系统负责管理所有的窗体,想要设计一个窗体,可以类比一个朋友想要开一个公司,设计一个窗体时,一个需要五步:

第一步:向操作系统注册此窗体类                                         类比:向有关部门注册公司

第二步:注册成功以后,开始创建窗口                                  类比:创建公司

第三步:显示更新窗口                                                          类比:公司开张

第四步:消息循环                                                                 类比:接受业务来往

第五步:处理消息                                                                 类比:处理业务


具体代码如下:

 

#include<Windows.h>
#include<tchar.h>
/*第一个参数:传入一个窗口句柄,由操作系统自动生成
*第二个参数:传入上一个窗口的句柄,Win32程序现在一般不用,设置为null
*第三个参数:长指针类型,传入一个程序运行的时候的命令行
*第四个参数:窗口默认显示方式,比如全屏,最小化等
*/
extern LRESULT CALLBACK WindowProc(HWND hWDd,UINT uMsg,WPARAM wParam,LPARAM lparam );//声明过程函数,在注册窗口的时候,会使用到。
int WINAPI _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmLine,
int nShowCmd)
{
const TCHAR pClassName[] = _T("WindowsDemo"); //这个窗体的名字,类似BUTTON,用来用来唯一标识该窗体
WNDCLASSEX wcex; //申请一个窗口,设计窗口的样式
//实例化窗口类对象
wcex.cbSize = sizeof(WNDCLASSEX);//对象的大小
wcex.cbClsExtra = 0; //指定紧跟在窗口类结构后的附加字节数
wcex.cbWndExtra = 0; //指定紧跟在窗口实例的附加字节数
wcex.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);//指定窗口背景颜色
wcex.hCursor = ::LoadCursor(NULL,IDC_ARROW);//指定光标的样式。比如输入样式:I,正常鼠标等,::两个冒号代表是调用的系统的API函数
wcex.hIcon = ::LoadIcon(NULL,IDI_APPLICATION);//指定图标,也可以自己设计
wcex.hIconSm = ::LoadIcon(NULL,IDI_APPLICATION);//指定小型图标
wcex.hInstance = hInstance;//将操作系统生成的句柄传递给我们所绑定的窗口
wcex.lpfnWndProc = WindowProc;//过程处理函数,回调函数,用来处理消息
wcex.lpszClassName = pClassName;//窗口类名
wcex.lpszMenuName = NULL;//菜单类名
wcex.style = CS_HREDRAW | CS_VREDRAW;//窗口样式
/*1.注册这个窗口类*/
BOOL bRet = ::RegisterClassEx(&wcex);//窗口有可能会注册失败,因此会返回一个布尔值
if (!bRet)
{
MessageBox(NULL,_T("提示"),_T("注册窗口失败!"),MB_OK);
return FALSE;
}
/*2.创建窗口*/
/*hWnd窗口句柄,和hInstance的区别:hInstance是整个应用程序的句柄,hWnd是这个应用程序的某个窗口的句柄,一个应用程序可能包含几个窗口*/
HWND hWnd = ::CreateWindowEx(
0, //窗口扩展风格[double类型]
pClassName,//窗口类名称[CHAR指针类型]
_T("Windows"),//窗口的标题[CHAR指针类型]
WS_VISIBLE | WS_OVERLAPPEDWINDOW,//窗口的风格[INT]
CW_USEDEFAULT,//窗口默认位子的X坐标(左上角)[INT]
CW_USEDEFAULT,//窗口默认位子的Y坐标(左上角)[INT]
CW_USEDEFAULT,//窗口默认大小宽度[INT]
CW_USEDEFAULT,//窗口默认大小高度[INT]
NULL,//父窗口的句柄
NULL,//菜单的句柄或是子窗口的标识符
hInstance,//当前的实例的句柄
NULL//指向窗口的创建数据
);
//因为有可能会创建失败,创建失败后返的句柄的null。
if (hWnd==NULL)
{
MessageBox(NULL, _T("提示"), _T("创建窗口失败!"), MB_OK);
return FALSE;
}
/*3.显示窗口*/
::ShowWindow(hWnd,SW_SHOW);
::UpdateWindow(hWnd);//刷新窗口
/*4.消息循环*/
MSG msg;
while (GetMessage(&msg,NULL,0,0))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return TRUE;
}
/*5.处理消息*/
LRESULT CALLBACK WindowProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch (uMsg)
{
//关闭的消息
case WM_CLOSE:
::DestroyWindow(hWnd);
return 0;
//销毁应用程序的消息
case WM_DESTROY:
::PostQuitMessage(0);
return 0;
default:
break;
}//否则返回默认的操作系统处理函数
return ::DefWindowProc(hWnd,uMsg,wParam,lParam);
}

在以上代码中,为了字符集的兼容性,在预定义中,有

WinMain               _tWinMain

LPSTR                   LPTSTR

char                       TCHAR

普通字符串           _T()

转载于:https://www.cnblogs.com/citron/p/6135603.html

最后

以上就是称心小丸子为你收集整理的Windows编程二之Windows内部运行机制详解的全部内容,希望文章能够帮你解决Windows编程二之Windows内部运行机制详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部