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编程主函数详解相关推荐

  1. linux网络编程常用函数详解与实例(socket--bind--listen--accept)

    常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...

  2. Windows编程—BroadcastSystemMessage函数详解

    介绍 BroadcastSystemMessage函数 可以发送一个消息给指定一类接受者(从Broadcast就可以看出,广播的意思).这里的接受者可以是,一般的应用程序.可装载的驱动程序.网络驱动程 ...

  3. Linux文件编程常用函数详解——lseek()函数

    lseek()函数的头文件和形式: #include <sys/types.h> #include <unistd.h> off_t lseek(int filedes, of ...

  4. linux socket编程 accept函数详解

    int accept(int sockfd,struct sockaddr * addr,socklen_t * addrlen); sockfd的参数为listen()函数返回的监听套接字: add ...

  5. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  6. 【Linux系统编程】vfork() 函数详解

    00. 目录 文章目录 00. 目录 01. vfork函数 02. fork和vfork区别 03. 父子进程地址空间 04. 附录 01. vfork函数 函数分析 #include <sy ...

  7. 【Linux系统编程】fork()函数详解

    00. 目录 文章目录 00. 目录 01. 进程创建函数 02. 父子进程结构 03. 父子进程地址空间 04. 附录 01. 进程创建函数 #include <sys/types.h> ...

  8. socket编程流程及函数详解

    socket编程流程及函数详解-服务器端 一.创建socket 二.命名socket 2.1通用的socket地址结构体 2.2专用socket地址 三.监听socket 四.接受连接 五.总结 一. ...

  9. DELPHI 中 Window 消息大全使用详解

    Window 消息大全使用详解 导读: Delphi是Borland公司的一种面向对象的可视化软件开发工具. Delphi集中了Visual C++和Visual Basic两者的优点:容易上手.功能 ...

最新文章

  1. startupinfo为什么需要初始化_为什么 TCP 建立连接要三次握手
  2. 2021年春季学期-信号与系统-第五次作业参考答案-第三小题
  3. Synchronization (computer science)
  4. 分布式版本控制系统Git学习资源收集汇总
  5. 在webpack和vue-cli上的rem适配终极方案
  6. html转机器语言,【转】HTML5的语音输入 渐进使用HTML5语言识别, so easy! – 文艺里的小清新...
  7. list选取多个元素 python_python基础篇:list列表的操作大盘点
  8. 符号级别(一)--基础概念
  9. spark mlilib 聚类 混合高斯
  10. We7开通问答系统:进一步开发社区的力量
  11. stm32死机问题的处理
  12. 正版windows序列号被激活工具重置问题解决
  13. LimeSurvey(开源问卷调查)
  14. 指派问题的遗传算法求解 Java实现
  15. 虚拟服务器忘记密码,win7系统下VMware虚拟机忘记开机密码的解决方法
  16. java分类Kdd99数据集_【数据】主题分类数据集
  17. python爬虫-20行代码爬取王者荣耀所有英雄图片,小白也轻轻松松
  18. Parameter specified as non-null is null method kotlin.jvm.internal.Intrinsics.checkNotNullParameter
  19. 在WINDOWS运行框中能够输入的命令有多少?(转)
  20. cpp+数据结构+设计模式

热门文章

  1. Android 让EditText不可编辑
  2. Struts-Logic 标签库
  3. React学习笔记2:React面向组件编程
  4. 面试官问为什么新生代不用标记清除算法
  5. 高端华为笔记本敲代码就是爽!!包邮送!
  6. 美团智能问答技术探索与实践
  7. 秒懂JVM的三大参数类型,就靠这十个小实验了
  8. 2018程序员必备碎片化学习工具(年度精选)
  9. Scrum指南新版发布,再添新概念—Product Goal
  10. 当前国内有哪些公司是做OKR管理软件做的比较好的?