Windows程序
Windows程序是事件驱动的,对于一个窗口,它的大部分例行维护是由系统维护的。每个窗口都有一个消息处理函数。在消息处理函数中,对传入的消息进行处理。系统内还有它自己的缺省消息处理函数。
客户写一个消息处理函数,在窗口建立前,将消息处理函数与窗口关联。这样,每当有消息产生时,就会去调用这个消息处理函数。通常情况下,客户都不会处理全部的消息,而是只处理自己感兴趣的消息,其他的,则送回到系统的缺省消息处理函数中去。系统会将针对这个程序的消息依次放到程序的“消息队列”中,由程序自己依次取出消息,在分发到对应的窗口中去。
因此,建立窗口后,将进入一个循环。在循环中,取出消息、派发消息,循环往复,直到取得的消息是退出消息。循环退出后,程序即结束。
下面是一个相应鼠标左键单击事件的小示例:




Code#include <windows.h> void InitApplication(HINSTANCE);
BOOL InitInstance(HINSTANCE,int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); /********************************************
* WinMain 主程序入口 *
********************************************
* hInstance 面向应用程序的当前句柄 *
* hPrevInstance 此时的当前句柄 *
* lpCmdLine 命令行的字符串 *
* nCmdShow 启动时的显示方式 *
********************************************/
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
MessageBox(GetFocus(),"Hello world!","Message",MB_OK);
//MessageBox(NULL,"Hello world!","Message",MB_OK);
//MessageBox(NULL,lpCmdLine,"CmdLine",0);
InitApplication(hInstance);
if(InitInstance(hInstance,nCmdShow))
{
//return 0;
while(GetMessage(&msg,(HWND)NULL,(UINT)NULL,(UINT)NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (msg.wParam);
} /************************************
* InitApplication 初始化程序 *
************************************
* hInstance 面对应用的句柄 *
************************************/
void InitApplication(HINSTANCE hInstance)
{
// 注册窗口类
WNDCLASSEX wc;
wc.cbSize=sizeof(wc);
wc.style=CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc=(WNDPROC)MainWndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName="MainClass";
wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
if (!RegisterClassEx(&wc))
{
MessageBox (NULL, TEXT ("RegisterClass Fail!"),
“Message”, MB_ICONERROR) ;
}
} /********************************
* InitInstance 初始化窗口 *
********************************
* hInstance 面对应用的句柄 *
* nCmdShow 启动时的显示方法*
********************************/
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
HWND hWnd;
hWnd=CreateWindow("MainClass", // 窗口类名称
"Image Processing",// 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口风格
CW_USEDEFAULT, // 窗口位置大小
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL, // 父視窗的 handle,若本視窗是父視窗,則設為 NULL
NULL, // 選單的 handle
hInstance, // 主程式句柄
NULL); // 額外資料的指標,若無額外資料通常都設為 NULL
if (hWnd==NULL)
return (FALSE);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return TRUE;
} /****************************
* MainWndProc 信息的处理 *
****************************
* hWnd 窗口 *
* message 信息 *
* wParam 字参数 *
* lParam 长参数 *
****************************/
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// 处理感兴趣的消息
switch (message)
{
// 鼠标左键按下事件
case WM_LBUTTONDOWN:
MessageBox(hWnd,"鼠标左键已被按下!","Message",MB_OK);
break; // 当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环
case WM_DESTROY:
MessageBox(GetFocus(),"Thank you for used!","Message",MB_OK);
PostQuitMessage(0);
break; // 不感兴趣的消息转交给系统提供的缺省处理函数处理
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
Windows程序的更多相关文章
- 初识Windows程序
首先,我们创建第一个Windows程序,一共分为4个步骤: 1.打开Visual Studio开发工具 2.选择"文件"→"新建"→"项目" ...
- Windows程序内部运行机制 转自http://www.cnblogs.com/zhili/p/WinMain.html
一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...
- Visual Studio 创建C++或C#Windows程序
使用工具Visual Studio,创建一个C++或C#Windows程序,在主窗口中显示“Hello World”,用户可以用鼠标拖动“Hello World”在主窗口中移动 首先创建一个项目 选 ...
- Linux下运行windows程序
现在Winxp停止了支持,那我们的windows程序是否可以再linux上执行呢,如下是一些参考的信息 在您的 Linux/Mac 操作系统上运行 Windows 软件 http://www.wine ...
- 深入浅出话VC++(1)——Windows程序内部运行机制
一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...
- 通过weburl 启动windows程序
1. 注册表修改 建立一个reg文件 执行导入 以RunLocal协议为例子 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\RunL ...
- 窗体==>>初始Windows程序
初识Windows程序 01.创建Windows程序(VS) 01.打开Visual Studio开发工具 02.选择"文件"→"新建"→"项目&qu ...
- windows程序防狼术入门
当初由于一些原因以及兴趣,学习了一段时间软件逆向,对于软件加密解密有了点粗略的了解.而后看到某些同学辛辛苦苦的搞出个软件,自己费心费力去加密,但搞出来后往往能被秒破,实不忍心.今天大概总结下一些基本的 ...
- Windows程序----初识Windows程序
先来看一些励志名言来激励一下自己吧! 励志名言:每一发奋发奋的背后,必有加倍的赏赐 1.有无目标是成功者与平庸者的根本差别. 2.成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成. 3.当 ...
- 关于windows程序的学习及思考系列之一
1.窗口类的注册 a.windows程序中最简单的就是创建一个简单的窗口,而窗口程序的创建是基于窗口类的,窗口类决定了处理窗口消息的过程函数. b.一个窗口类可以用于创建多个窗口,也就是说窗口是窗口类 ...
随机推荐
- 如何利用JUnit开展一个简单的单元测试(测试控制台输出是否正确)
待测类(CreateString)如下: public class CreateString { public void createString() { //Output the following ...
- [转载]金融行业 DevOps 解决方案概述
2009 年 6 月份,John Allspaw 及 Paul Hammond 在速度大会 (Velocity) 上分享了在 Flickr 中如何通过加强 Dev(开发团队)和 Ops(运维团队)之间 ...
- C# 判断access建库、建表、文件是否存在等
1.创建数据库 2.判断表是否存在 3.创建表 1. #region access数据库操作 之 创建数据库 private void creatMDB(string dbNam ...
- VS2017 v15.8.0 Task ExpandPriContent failed. Illegal characters in path
昨天更新了VS到最新版本v15.8.0,但是编译UWP出现了操蛋的bug. 谷歌一下,vs社区已经有答案了. 打开.csproj文件,在节点 <PropertyGroup> 里面,加上一行 ...
- 201621123018《java程序设计》第13周作业总结
1. 本周学习总结 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网络同时使用,需要为你的系统增加网络功能. 2.1 简述你想为你的系统增加什 ...
- Linux系统VIM编辑器管理(2)
VI/VIM模式概述 在 Linux 的世界中,绝大部分的配置文件都是以 ASCII 的纯文本形态存在,因此利用简单的文字编辑软件就能够修改设定了,与微软的 Windows 系统不同的是,如果你用惯了 ...
- ReactiveCocoa 源码阅读记录。
1:RACSingle 需要订阅信号 RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACS ...
- webstorm “Unterminated statement”
使用webstorm的时候,写console.log,或者一些其他语句的时候 偶尔会出现这种提示,不是报错,就是看着别扭,应该是写法规范问题. 解决办法: 在下面空一行就行了
- Swift5 语言参考(一) 关于语言参考
本系列文章的这一部分描述了Swift编程语言的形式语法.此处描述的语法旨在帮助您更详细地理解语言,而不是允许您直接实现解析器或编译器. Swift语言相对较小,因为Swift代码中几乎无处不在的许多常 ...
- Django自带的后台管理样式找不到的问题。
今天发现自己用uwsgi,nginx部署完服务器后,又想用自带的Django服务器进行后台管理调试,发现Django后代管理页面样式找不到.又查看了路径发现是正确的.网上看了很多方法.最后才发现自己把 ...