All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
XML语法概述_[XML教程]
asp.net,控件开发(一)---显示控件内容_[Asp.Net教程]
在C#中取得指定长度的字符串_[Asp.Net教程]
WEB开发者需要了解的IE7的新功能_[Html教程]
ASP.NET服务器控件之视图状态_[Asp.Net教程]
C#的Windows编程中多语言的实现_.net资料_编程技术
W3C专业术语翻译对照表_[Html教程]
全面理解javascript的caller,callee,call,apply概念_JavaScript技术_编程技术
visual c++类中的静态成员
对初学者的建议:ASP.NET技术的学习顺序_[Asp.Net教程]
Reading number is top 10 pictures
Tie a large font of mouse
Beautiful vacuum girl1
清纯性感的美眉1
Fan bingbing black wings for platform and DanLuoWang believes beauty1
明星与豪宅
From China fortress sora aoi1
Wild animals melee moment of life and death1
上传几张色图
如果我是导演...
The cat shit
Download software ranking
Photoshop 8.0图象编辑软件
传奇私服架设教程
dreamweaver8中文版
Red cliff
Macromedia Dreamweaver 8
jBuilder2006
I for your crazy
Prostitutes diary
打鸟视频
Sora aoi's film--cangkong_Blue.Sky
qq published in(发表于) 2014/7/9 22:41:04 Edit(编辑)
visual c++在windows中的编程思想

visual c++在windows中的编程思想

visual c++在windows中的编程思想

visual c++在windows中的编程思想

Windows API(Application Programming Interface)是WIndows操作系统与应用程序之间的标准接口,它提供了上千个标准函数、宏和数据结构的定义。

API函数定义在一些动态链接库中(.DLL),其中,最主要的是User.dll、Gdi.dll和Kernel.dll 3个DLL文件。User.dll库中定义了窗口管理函数,包括窗口的创建、显示、移动等;Gdi.dll中定义了许多图形、图像设备函数(GDI),提供了与设备无关的图形绘制功能;Kernel.dll定义了系统服务函数,包括内存调度、进程管理等与操作系统有关的低层函数。

事件驱动程序

Windows操作系统是一个多任务操作系统,它可以同时运行多个程序,而且每一个程序都不可能独占系统资源。如用户可以一边处理Word,一边听MP3,只要机器的配置不是太低,用户绝对不会感觉到音乐是时断时续的。

多任务工作方式主要是通过事件驱动编程模式来完成的。事件驱动程序以窗口为中心,根据用户的不同操作激活处理相应函数以完成相应的任务。事件驱动是一种全新的程序设计方法,它不是由事件顺序来控制的,而是由事件的发生来控制的,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的用户用各种合理的顺序来安排程序的流程。

因此,可以总结出这样一条结论:Windows程序是面向用户的基于消息的事件驱动程序,而Windows应用程序的核心就是消息传递和消息处理。

消息概述

事件驱动是围绕着消息的产生与处理而展开的,消息是关于发生的事件的信息,而事件驱动是靠消息循环机制来实现的。

什么是消息呢?简单的说,消息是报告有关事件发生的通知。在Windows系统中,消息是一种Windows数据结构,其中包含有消息的名字、消息发生时的一些参数以及处理这个消息的函数的指针。

消息不仅可由Windows发出,也可由应用程序本身或其他程序产生,应用程序的消息还可以是自己定义的。Windows为每个应用程序都维护一个或多个消息队列,发送到每个程序窗口的消息都排成一个队列,称为消息队列。当某种事件发生时,Windows会根据事件发生的具体情况判断当前事件属于哪个程序,进而将对应的消息放入该程序的消息队列。应用程序轮流检测消息队列中的消息,但并不是每个消息都会由应用程序检测的,有些消息会让默认的窗口函数处理。



图1简单描述了这个过程。

图1 消息队列和在应用程序中的轮流处理

在Windows中提供了MSG结构来表示一个消息,MSG结构的定义如下:

typedef struct tagMSG{

HWND hWnd; //目标窗口句柄

UINT message; //消息标识

WPARAM wParam; //消息参数1

LPARAM lParam; //消息参数2

DWORD time; //消息发送时间

POINT pt; //消息发送时鼠标在屏幕上的坐标

//本教程来自http://www.isstudy.com

}MSG;

举个例子,例如现在需要关闭对话框窗口,读者可以向窗口发送一个WM_COMMAND消息,消息的参数是WM_DESTROY。或者向窗口发送一个WM_SYSCOMMAND消息,消息的参数是WC_CLOSE。

对话框(CDialog)类中提供虚函数PreTranslateMessage(),用这个函数可以截获或处理消息:

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

return CDialog::PreTranslateMessage(pMsg);

}

除了使用PreTranslateMessage()虚函数,读者还可以使用API函数发送消息,笔者常使用SendMessage()函数,它的格式如下:

SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)

当用户单击按钮时,关闭标题为“消息实例”的窗口。

void CMyDlg::OnButton1()

{

CWnd* wnd=this->FindWindow(NULL,"消息实例"); //找到标题为"消息实例"的窗口

::SendMessage(wnd->GetSafeHwnd(),WM_SYSCOMMAND,SC_CLOSE,0);

}




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.