Window编程主函数详解
Windows编程中主函数是非常重要的,但是却在编写上非常简单(可能我这个初学者还不是很理解),有的时候我们。总体上可以分为这几个部分。
第一个是主函数的生命 WinMain(),这个含函数在百度上是这样定义的,这个函数是被系统调用的,是一个32位的应用程序的入口点,这个函数应初始化应用程序,显示一个主窗口,进入一个消息的接受,发送循环,这个循环是应用程序执行其余的部分的顶级的控制结构。
hInstance应用程序是当前实例的句柄
hprevInstancey应用程序先前实例的句柄,对于同一个应用程序打开两次,,出现的两个窗口第一个打开的实例也就是先前的实例。
lpCmdLine指向应用程序命令行的字符串的指针。
nCmdShow是指定窗口如何的显示。可以为这些值:
SW_HIDE:隐藏窗口并且激活另外一个窗口。
SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。
SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。
SW_SHOWMAXIMIZED:激活窗口并且将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其最小化(以图标显示)。
SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。
SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。
SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。
SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同)。
然后我们定义一个消息的结构体:MSG Message;一个句柄HWND hWnd,和一个窗口的模板类WNDCLASS wndclass。接着我们给窗口结构体的每一个成员进行赋值。
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="DlgInstance";
wndclass.lpszMenuName="Menu";
wndclass.style=0;
然后注册该窗口 RegisterClass(&wndclass).
接着我们创建一个窗口,用到的函数是CreateWindow(),并且这个函数的返回值是一个窗口的句柄,显示窗口,
ShowWindow(),刷新窗口,UpdateWindow,最后一个消息的循环,用来处理传递过来的消息
while(GetMessage(&Message,0,0,0))
{
if(!IsDialogMessage(hDlg,&Message))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
return Message.wParam;
源代码:
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
MSG Message;
HWND hWnd;
WNDCLASS wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="DlgInstance";
wndclass.lpszMenuName="Menu";
wndclass.style=0;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hWnd=CreateWindow("DlgInstance",
"虚拟存储器",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
hInst=hInstance;
while(GetMessage(&Message,0,0,0))
{
if(!IsDialogMessage(hDlg,&Message))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
return Message.wParam;
}
Window编程主函数详解相关推荐
- linux网络编程常用函数详解与实例(socket--bind--listen--accept)
常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...
- Windows编程—BroadcastSystemMessage函数详解
介绍 BroadcastSystemMessage函数 可以发送一个消息给指定一类接受者(从Broadcast就可以看出,广播的意思).这里的接受者可以是,一般的应用程序.可装载的驱动程序.网络驱动程 ...
- Linux文件编程常用函数详解——lseek()函数
lseek()函数的头文件和形式: #include <sys/types.h> #include <unistd.h> off_t lseek(int filedes, of ...
- linux socket编程 accept函数详解
int accept(int sockfd,struct sockaddr * addr,socklen_t * addrlen); sockfd的参数为listen()函数返回的监听套接字: add ...
- C语言网络编程:accept函数详解
文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...
- 【Linux系统编程】vfork() 函数详解
00. 目录 文章目录 00. 目录 01. vfork函数 02. fork和vfork区别 03. 父子进程地址空间 04. 附录 01. vfork函数 函数分析 #include <sy ...
- 【Linux系统编程】fork()函数详解
00. 目录 文章目录 00. 目录 01. 进程创建函数 02. 父子进程结构 03. 父子进程地址空间 04. 附录 01. 进程创建函数 #include <sys/types.h> ...
- socket编程流程及函数详解
socket编程流程及函数详解-服务器端 一.创建socket 二.命名socket 2.1通用的socket地址结构体 2.2专用socket地址 三.监听socket 四.接受连接 五.总结 一. ...
- DELPHI 中 Window 消息大全使用详解
Window 消息大全使用详解 导读: Delphi是Borland公司的一种面向对象的可视化软件开发工具. Delphi集中了Visual C++和Visual Basic两者的优点:容易上手.功能 ...
最新文章
- startupinfo为什么需要初始化_为什么 TCP 建立连接要三次握手
- 2021年春季学期-信号与系统-第五次作业参考答案-第三小题
- Synchronization (computer science)
- 分布式版本控制系统Git学习资源收集汇总
- 在webpack和vue-cli上的rem适配终极方案
- html转机器语言,【转】HTML5的语音输入 渐进使用HTML5语言识别, so easy! – 文艺里的小清新...
- list选取多个元素 python_python基础篇:list列表的操作大盘点
- 符号级别(一)--基础概念
- spark mlilib 聚类 混合高斯
- We7开通问答系统:进一步开发社区的力量
- stm32死机问题的处理
- 正版windows序列号被激活工具重置问题解决
- LimeSurvey(开源问卷调查)
- 指派问题的遗传算法求解 Java实现
- 虚拟服务器忘记密码,win7系统下VMware虚拟机忘记开机密码的解决方法
- java分类Kdd99数据集_【数据】主题分类数据集
- python爬虫-20行代码爬取王者荣耀所有英雄图片,小白也轻轻松松
- Parameter specified as non-null is null method kotlin.jvm.internal.Intrinsics.checkNotNullParameter
- 在WINDOWS运行框中能够输入的命令有多少?(转)
- cpp+数据结构+设计模式