Visual C++ 入门精解《二》.doc_第1页
Visual C++ 入门精解《二》.doc_第2页
Visual C++ 入门精解《二》.doc_第3页
Visual C++ 入门精解《二》.doc_第4页
Visual C++ 入门精解《二》.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文章源自:/msgwg999Visual C+ 入门精解二VC+常用技能术语的讲解 WINDOWS运用程序设计用到的根本术语: 1.窗口 任何一个运用过Windows的人对窗口这个概念肯定不会生疏,窗口是windows运用程序的根本操作单元,用户经过它与运用程序发作交互,例如输入输出操作等等,从程序的内部作业本来来看,每一个窗口对应一个音讯处置行列,运用程序首要经过窗口音讯处置函数对用户的输入操作进行呼应与处置。要想从程序员的视点充沛知道窗口的意义,那么对WNDCLASS这个数据布局进行充沛的知道是有必要的。2.实例 单个实例代表一个可履行程序在内存中的复制,若是一个运用程序履行许屡次,那么在内存中就有多少个复制,也就能够阐明有多少个实例存在。3.句柄 句柄在windows环境下被界说成了一个无符号的整数,用于标识运用程序中不一样的目标和同类目标中的不一样实例。句柄能够看成是目标的编号,联络上面的实例,那么一个实例句柄就能够看作是单个运用程序在内存中复制的仅有身份编号,一般体系只能经过实例句柄去辨认不一样的运用程序,或许是一样运用程序的不一样副本。4.资源 Windows运用程序包含许多资源,例如,菜单,图标,对话框等等,VC+环境下咱们不仅仅能够运用体系下原有的资源,咱们也能够界说自个的资源,这些资源被界说在.RC文件中,经过运用程序最终的编译,这些资源文件和程序代码衔接在一起,构成一个可履行的.EXE文件或许是一个.DLL的库文件。在运用这些资源的时分,经过WIN API函数学将这些资源调用运用。5.窗口音讯处置函数 窗口是人机交互的接口,当窗口承受到输入恳求的时分,就会把这一恳求交给某一个函数进行处置,而这个函数即是窗口音讯处置函数,它能够决定当一个音讯被承受到的时分采纳啥举动。音讯一般是由一系列的输入操作触发的,比方当我按下鼠标左键那么窗口音讯处置函数就会收到一个WM_LBUTTONDOWN的音讯信号。在窗口音讯处置函数中,咱们能够运用switch和case布局进行操控, 针对此音讯作出咱们想要的操作。6.图形设备接口 运用程序的任何输出操作都需求经过图形设备接口(GDI)中的函数来完结操作,GDI担任体系与用户或绘图程序之间的信息交流,并操控在输出设备上显现图形或许文字,它将程序员与具体的硬件设备隔脱离,让程序员不需求思考硬件设备操作的细节。7.回调函数 回调函数是windows操作体系自个调用的函数,用户是不能直接调用他们的。回调函数的界说有必要严厉的依照windows规范进行编写。在下面咱们即将看到的HelloWin程序中,WndProc即是一个回调函数,它是是运用程序的窗口音讯处置函数,当注册窗口类的时分,要把窗口音讯处置函数的地址通知Windows,Windows经过调用此函数进行音讯处置。第三有些:HelloWin程序的具体剖析。 Windows运用程序的根本运转机制与HelloWin程序具体解 总的来说最根本的Windows运用程序的运转履行次序总是以如下的根本次序履行的。次序布局: -界说窗口类-初始化窗口类-窗口的实例化-经过音讯循环获取音讯并将音讯发送给音讯处置函数做出相应的操作 由于windows运用程序运转的逻辑布局特别所以代码的具体解说笔者就不把程序于叙说分隔了了,这样有利于阅览与剖析。剖析代码如下: /程序作者:管宁 /站点: /一切稿件均有版权,如要转发,请有必要注明出处和作者 #include #pragma comment(lib,winmm.lib)/为了要播映声响,有必要导入这个库LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)/* HINSTANCE 类型的意义为实例句柄。 hInstance 现实上即是当时运用程序本身的标识代号,代号一般都是一个32位整数。 hPrevInstance 与曩昔的16位运用程序有联系,表明指向前一个实例的句柄。 PSTR 类型的意义是指向以0完毕的字符串指针。 szCmdLine 前面的sz同样是表明指向以0完毕的字符串指针,这个目标用于保管命令行。 最终iCmdShow是一个整型数据,标记了程序开端的显现状况。 为SW_SHOWNORAML的时分为一般巨细显现方法。 为SW_SHOWMAXIMIZED的时分为最大化显现方法。 为SW_SHOWMINNOACTIVE的时分程序将显现在任务栏上。*/ static char szAppName = TEXT(HelloWin);/预先界说一个c个性字符串,稍后用于设置窗口类称号。 WNDCLASS wndclass;/界说窗口类目标/* 在这里不得不说一下的是,窗口类现实上是struct布局体,内部有10个重量,他们是用来于初始化窗口类目标而用的。 这个布局体在winuser.h头文件中界说,从方法上来说,分为ASCII版的WNDCLASSA和Unicode版的WNDCLASSW两个。 typedef struct tagWNDCLASSA UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCSTR lpszMenuName; LPCSTR lpszClassName; WNDCLASSA, *PWNDCLASSA, NEAR *NPWNDCLASSA, FAR *LPWNDCLASSA; typedef struct tagWNDCLASSW UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;*/- 窗口类目标初始化进程 - wndclass.style = CS_HREDRAW | CS_VREDRAW; /* 设置窗口类目标的款式个性,CS_HREDRAW | CS_VREDRAW这两个值是经过位运算的与运算结合起来的。 表明了窗口在改动了水平缓笔直巨细的时分,窗口要逼迫改写。 这些经过define界说的标识,能够在WinUser.h头文件中找到。 #define CS_VREDRAW 0x0001 #define CS_HREDRAW 0x0002 #define CS_DBLCLKS 0x0008 #define CS_OWNDC 0x0020 #define CS_CLASSDC 0x0040 #define CS_PARENTDC 0x0080 #define CS_NOCLOSE 0x0200 #define CS_SAVEBITS 0x0800 #define CS_BYTEALIGNCLIENT 0x1000 #define CS_BYTEALIGNWINDOW 0x2000 #define CS_GLOBALCLASS 0x4000 #define CS_IME 0x00010000 */ wndclass.lpfnWndProc = WndProc ;/指定窗口的处置函数为WndProc,WndProc将处置windows音讯。 wndclass.cbClsExtra = 0;/窗口类无拓展 wndclass.cbWndExtra = 0;/窗口实例无拓展 wndclass.hInstance = hInstance;/指定当时运用程序实例句柄,也即是程序当时的标识号。 wndclass.hIcon = LoadIcon (NULL,IDI_APPLICATION); /* 经过LoadIcon函数设置运用程序窗口标题的icon图标。 HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName); 函数回来HICON类型的图标句柄。 第一个参数表明当时运用程序的窗口句柄,第二个参数表明图标。 默许状况下,第一个参数为NULL,第二个为IDI_APPLICATION,表明运用体系默许供给的图标,能够在WinUser.h头文件中找到。 #define IDI_APPLICATION 32512 */ wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; /* 经过LoadCursor函数设置运用程序窗口光标款式。 HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName); 函数回来HCURSOR类型的光标句柄。 第一个参数表明当时运用程序的窗口句柄,第二个参数表明光标。 默许状况下,第一个参数为NULL,第二个为IDC_ARROW,表明运用体系默许供给的光标,能够在WinUser.h头文件中找到。 #define IDC_ARROW MAKEINTRESOURCE(32512) */ wndclass.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH); /* 经过GetStockObject函数设置运用程序窗口的布景色彩。 HGDIOBJ GetStockObject(int fnObject); 函数回来HCURSOR类型的GDI目标句柄,为了程序能够正确履行,有必要把HGDIOBJ类型强迫转换成HBRUSH画刷句柄。 参数表明当时运用的画刷色彩。 这些常量的界说能够在WinGDI.h头文件中找到。 #define WHITE_BRUSH 0 #define LTGRAY_BRUSH 1 #define GRAY_BRUSH 2 #define DKGRAY_BRUSH 3 #define BLACK_BRUSH 4 #define NULL_BRUSH 5 #define HOLLOW_BRUSH NULL_BRUSH */ wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName;/窗口类目标的称号/- RegisterClass (&wndclass); /* 注册窗口类,参数为窗口类目标的指针。 函数原形为: ATOM RegisterClass(CONST WNDCLASS *lpWndClass); */- 实例化进程 - HWND hwnd ; /创立用于保管窗口句柄的目标,窗口句柄是体系辨认不一样窗口的依据,它仅仅个代号。 hwnd = CreateWindow( szAppName, / 窗口类称号 你好国际, / 窗口标题 WS_OVERLAPPEDWINDOW, / 窗口款式 CW_USEDEFAULT, / 初始的窗口x轴方位 CW_USEDEFAULT, / 初始的窗口y轴方位 CW_USEDEFAULT, / 初始的窗口x轴巨细 CW_USEDEFAULT, / 初始的窗口y轴巨细 NULL, / 父窗口句柄 NULL, / 窗口功用表句柄 hInstance, / 运用程序实例句柄 NULL / 树立参数,这个参数能够存取后边程序中能够引用到的材料。 ); /* 在窗口类目标的初始化进程中,咱们界说了窗口的一些简略一般特征,比方布景色彩呀,光标呀,等等。 但是在运用CreateWindow创立窗口的时分能够设置更多的细节,比方窗口标题这些。 函数原形如下: HWND CreateWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam ); 一旦窗口创立成功,那么CreateWindow将回来窗口句柄,也即是窗口代号,值保管在窗口句柄目标hwnd中。 */ ShowWindow(hwnd, iCmdShow); /* 在履行过CreateWindow函数后,在体系的内部窗口现已创立成功了。 但为了要把窗口显现在桌面上,咱们还有必要调用ShowWindow函数。 其函数原形如下: BOOL ShowWindow(WND hWnd,int iCmdShow); 参数1是需求显现的窗口句柄,第二个则是传递给WinMain的iCmdShow,用来断定最开端窗口的显现方法。 在这里窗口的显现方法,首要是指最大化,最小化这些。 */ UpdateWindow (hwnd); /* UpdateWindow这个函数的作用是用于重绘显现区域。 由于若是ShowWindow函数的iCmdShow从WinMain取得的参数是SWSHOWNORMAL,那么窗口的显现区域就会被布景画刷掩盖, 调用UpdateWindow函数会经过发送给窗口音讯处置函数WndProc一个WM_PAINT音讯,经过这个音讯完结重绘显现区域的作业。 */-/- 音讯循环 - /* 当调用过UpdateWindow函数后,窗口现已显现在了桌面屏幕上,接下来要做的作业是处置音讯。 windows运用程序能够承受各种音讯包含键盘,鼠标,等等。 windows是经过监督各种输入设备,把发作的事情转化为音讯的,并将音讯保管在音讯行列中。 最终当时的运用程序从自个的音讯行列中按次序检索音讯,并把每一个音讯发送到所对应的窗口音讯处置函数总去,这里是指WndProc。 */ MSG msg ;/树立音讯目标。 /* MSG是个布局体类型,在WinUser.h头文件中能够找到。 typedef struct tagMSG HWND hwnd;/窗口句柄 UINT message;/音讯辨认字,在WinUser.h头文件中能够找到,以WM最初,这里就不悉数举出来了。 WPARAM wParam;/32位的音讯参数,其意义和值依据音讯的不一样而不一样。 LPARAM lParam;/32位的音讯参数,其值和音讯无关。 DWORD time;/音讯进入音讯行列的时刻。 POINT pt;/音讯进入音讯行列时分的鼠标坐标。 #ifdef _MAC DWORD lPrivate; #endif MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG; 其间POINT也是个布局体类型,在WinDef.h头文件中能够找到 typedef struct tagPOINT LONG x; LONG y; POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT; */ while (GetMessage (&msg, NULL, 0, 0) /* 咱们经过这个循环代码来保护音讯循环,循环的履行条件是经过GetMessage函数取得的。 函数原型如下: BOOL GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax); 参数一是一个指向msg目标的指针,剩下的参数为NULL或0表明程序承受它自个树立的一切窗口的音讯。 windows从音讯行列取出的下一个音讯将填充MSG布局中的各成员重量。 */ TranslateMessage (&msg);/把虚拟键盘音讯转换到字符音讯,满意键盘输入的需求,参数为msg音讯目标的指针。 DispatchMessage (&msg); /* 把当时的音讯发送到窗口音讯处置函数中去处置,在这里为WndProc。 当DispatchMessage调用完毕后,循环再次重复,从头回到GetMessage处,接着获取音讯。 若是音讯循环接收到WM_QUIT音讯则跳出音讯循环。 */ /- return msg.wParam;/回来音讯布局中的wParam成员信息。 /* MSG布局的wParam成员的值是传递给PostQuitMessage函数参数,一般是0。 由于PostQuitMessage函数是在完毕音讯循环有必要调用的函数。 体系其实是履行了return 0;完毕了WinMain函数退出了程序,很想操控台运用程序main完毕的时分的return 0;,所以直接写return 0;也不会致使程序过错。 */LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)/窗口音讯处置函数/* 函数回来类型为LRESULT,是一个长整数,润饰CALLBACK表明此函数为回调函数,函数的回来类型,和参数次序都有必要依照体系的规则设置。 参数一为窗口句柄,第二个参数是无符号整型数据,用于标识承受的音讯,最终两个参数为32位的音讯参数,供给了更多关于音讯的信息。 WPARAM和LPARAM都表明的是长整数,该函数的四个参数与MSG布局的前四个成员一样。 音讯处置函数,一般是windows自个调用的,当然程序作者也能够经过调用SendMessage函数直接呼叫自个的窗口音讯处置函数,仅仅在这里暂时不评论。*/ HDC hdc;/创立设备描述句柄目标 PAINTSTRUCT ps;/创立制作布局目标 /* PAINTSTRUCT布局包含了一些窗口音讯处置程序,能够用来更新窗口显现区域中的信息。 布局如下: typedef struct tagPAINTSTRUCT HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved32; PAINTSTRUCT, *PPAINTSTRUCT; */ RECT rect;/创立矩形布局目标 /* 此布局的界说如下: typedef struct _RECT LONG left; LONG top; LONG right; LONG bottom; RECT, *PRECT; */ switch (message)/经过switch和case布局来断定处置啥样的音讯,若是不想处置某些音讯则把音讯传递给DefWindowProc函数处置。 case WM_CREATE:/当窗口创立的时分取得WM_CREATE音讯 PlaySound (TEXT(C:online.wav),NULL,SND_FILENAME|SND_ASYNC);/播映声响 return 0;/窗口音讯处置函数若是正在处置音讯有必要回来0 case WM_PAINT:/通知窗口更新显现区域的信息 /* 当窗口刚开端树立的时分,整个显现区域都是无效的,由于程序还没有在窗口上制作任何东西。 第一条WM_PAINT音讯一般发作在调用UpdateWindows函数的时分,通知窗口音讯处置函数在显现区域制作一些东西。 现实受骗用户把wndclass.style设置成CS_HREDRAW | CS_VREDRAW后,一旦用户改动窗口巨细,就会把显现区域当作无效,这时分就会收到WM_PAINT音讯。 */ /* 一般在处置WM_PAINT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论