Windows应用程序框架.docx_第1页
Windows应用程序框架.docx_第2页
Windows应用程序框架.docx_第3页
Windows应用程序框架.docx_第4页
Windows应用程序框架.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

Windows应用程序框架1.WinMain函数功能: (1)注册窗口类,建立窗口及执行初始化操作。(2)进入消息循环,根据接受的消息调用相应处理过程(3)当消息循环检测到WM_QUIT消息时终止程序WinMain的函数说明int WINAPI WinMain( HINSTANCE hThisInst, /应用程序当前实例句柄 HINSTANCE hPrevInst, /应用程序其他实例句柄 (基于win32的应用程序此参数为NULL) LPSTR lpszCmdLine, /指向程序命令行参数的指针 (Long Point) Int nCmdShoow /应用程序开始执时窗口显示方式的整数标识(窗口显示的状态(最大化最小化等))初始化(A)窗口类定义常用函数 HICON LoadIcon /加载图标( HINSTANCE hInstance, /图标资源所在模块句柄,为NULL则用系统预定义图标 LPCTSTR lpIconName /图标资源名或系统预定义图标标识名)HCURSOR LoadCursor /加载窗口光标( HINSTANCE hInstance, /光标资源所在模块句柄,为NULL则用系统预定义光标LPCTSTR lpCursorName /光标资源名或系统预定义光标标识名)HBRUSH GetStockObject(int nBrush);/nBrush是系统提供的背景刷的标识名(B)注册窗口类窗口类必须先注册后使用RegisterClass(&wndclass); /wndclass是窗口类的结构(C)创建窗口HWND CreateWindow( LPCTSTR lpClassName, /窗口类名 LPCTSTR lpWindowName, /窗口标题名 DWORD dwStyle,/ 窗口样式 int x, /窗口左上角坐标 int y, /窗口左上角坐标 int nWidth, /窗口宽 int nHeight, /窗口高 HWND hWndParent, /该窗口的父窗口句柄 HMENU hMenu, /窗口主菜单句柄 HINSTANCE hInstance, /创建窗口的应用程序当前句柄 LPVOID lpParam /指向一个传递给窗口的参数值的指针);dwStyle的样式:WS_BORDER:创建一个单边框的窗口。WS_CAPTION:创建一个有标题框的窗口(包括WS_BODER风格)。WS_CHIlD:创建一个子窗口。这个风格不能与WS_POPVP风格合用。WS_CHLDWINDOW:与WS_CHILD相同。WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。在创建父窗口时使用这个风格。WS_CLlPBLINGS;排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到WM_PAINT消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如果未指定WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口。WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗日不能接受来自用户的输入信息。WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,自第二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风格,从而使用户可以在组间移动。用户随后可以使用光标在组内的控制间改变键盘焦点。WS_HSCROLL:创建一个有水平滚动条的窗口。WS_ICONIC:创建一个初始状态为最小化状态的窗口。与WS_MINIMIZE风格相同。WS_MAXIMIZE:创建一个具有最大化按钮的窗口。该风格不能与WS_EX_CONTEXTHELP风格同时出现,同时必须指定WS_SYSMENU风格。WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与WS_TILED风格相同。WS_OVERtAPPEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口,与WS_TILEDWINDOW风格相同。WS_POPUP;创建一个弹出式窗口。该风格不能与WS_CHLD风格同时使用。WS_POPUWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION和WS_POPUPWINDOW必须同时设定才能使窗口某单可见。WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。WS_SYSMENU:创建一个在标题条上带有窗口菜单的窗口,必须同时设定WS_CAPTION风格。WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键后使键盘焦点转移到下一具有WS_TABSTOP风格的控制。WS_THICKFRAME:创建一个具有可调边框的窗口,与WS_SIZEBOX风格相同。WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED风格相同。WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU MS_THICKFRAMEWS_MINIMIZEBOX,WS_MAXMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。WS_VISIBLE:创建一个初始状态为可见的窗口。WS_VSCROLL:创建一个有垂直滚动条的窗口。(D)显示窗口BOOL ShowWindow(HWND hwnd,int nCmdShow);显示窗口后,调用UpdateWindow函数更新并绘制用户区,并发出WM_PAINT消息UpdateWindow(HWND hwnd);消息循环MSG Msg;.while(GetMessage(&Msg,NULL,0,0) TranslateMessage(&Msg); DispatchMessage(&Msg);GetMessage( lpMSG, /指向MSG结构的指针 hwnd, /此项若为NULL则表示调用程序窗口所有的消息 nMsgFilteMin, / 用于消息过滤的最小信号值 nMsgFilteMax /用于消息过滤的最大信号值) TranslateMessage(lpMSG)函数用于将消息的虚拟键转换为字符信息 DispatchMessage(lpMSG)函数将参数lpMSG指向的消息传送到指定的窗口函数2.窗口函数LRESULT CALLBACK WndProc(HWND hWnd,UINT message,UINT wParam,LONG lParam).switch(message)case.break;.case WM_DESTROY:PostQuitMessage(0);defult:return DefWindowProc(hWnd,Message,wParam,lParam);return(0);3. 数据结构(1)MSG typedef struct tagMSG HWND hwnd; /窗口句柄UINT message;/消息值,该值由windows.h头文件的宏定义来标识WPARAM wParam; /消息的附加信息LPARAM lParam;/消息的附加信息DWORD time; /消息投递到消息队列中的时间POINT pt; /鼠标的当前位置 MSG;(2)WNDCLASStypedef struct UINT style; /描述类风格。该成员可以是“Class Styles”的任意组合。 WNDPROC lpfnWndProc;/指向窗口过程的指针。必须使用CallWindowProc函数调用窗口过程。 int cbClsExtra;/ 表示窗口类结构之后分配的额外的字节数。系统将该值初始化为0. int cbWndExtra;/表示窗口实例之后分配的额外的字节数。系统将该值初始化为0.如果使 用资源文件里的CLASS指令创建对话框,并用WNDCLASS注册该对话框时, cbWndExtra必须设置成DLGWNDOWEXTRA。 HINSTANCE hInstance;/包含该类实例的句柄,该实例包含了窗口过程。 HICON hIcon;/ 类图标的句柄。 HCURSOR hCursor;/鼠标指针的句柄 HBRUSH hbrBackground;/背景画刷的句柄。 LPCTSTR lpszMenuName;/窗口菜单资源名 LPCTSTR lpszClassName;/窗口类名 WNDCLASS, *pWNDCLASS;注:如果类是WNDCLASSEX,则在UINT style前还要加上UINT cbSize;/size of the structure(一般用法winclass.cbSize=sizeof(WNDCLASSEX);)(3)PAINTSTRUCTBeginPaint()函数反回值ps(PAINTSTRUCT)typedef struct tagPAINTSTRUCT HDC hdc; /graphics device context BOOL fErase; /if TRUE then you must draw background RECT rcPaint; /the RECT containing invalid region BOOL fRestore; /internal BOOL fIncUpdate; /internal BYTE rgbReserved32; /internalPAINTSTRUCT;要刷新内存,下边是RECT的定义:typedef struct _RECT LONG left; /left edge of rectangle LONG top; /top edge of rectangle LONG right; /right edge of rectangle LONG bottom; /bottom edge of rectangleRECT;例子:#include#include#includeBOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);HFONT CreateFont(HDC hDC,int nCharHeight,BOOL bItalic);int i=0;int x11,y11;int color11;POINT pt;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)MSG Msg;if(!InitWindowsClass( hInstance)return FALSE;if(!InitWindows(hInstance,nCmdShow)return FALSE;while(GetMessage(&Msg,0,0,0)TranslateMessage(&Msg);DispatchMessage(&Msg);LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)HDC hdc;HFONT hf;PAINTSTRUCT ps;TEXTMETRIC tm;char str= Hello VC ;switch(iMessage)case WM_CREATE:SetTimer(hWnd,1,40,NULL);GetCursorPos(&pt);for(i=0;i1;i-)xi=xi-1+80;yi=yi-1;GetCursorPos(&pt);x1=pt.x;y1=pt.y;for(i=1;i1;i-)colori=colori-1;DeleteObject(hf);EndPaint(hWnd,&ps);return 0;case WM_TIMER:InvalidateRect(hWnd,NULL,1);break;case WM_DESTROY:PostQuitMessage(0);KillTimer(hWnd,1);return 0;default:return DefWindowProc(hWnd,iMessage,wParam,lParam);return 0; BOOL InitWindowsClass(HINSTANCE hInstance)WNDCLASS WndClass;WndClass.cbClsExtra=0;WndClass.cbWndExtra=0;WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH);WndClass.hCursor=LoadCursor(hInstance,IDC_ARROW);WndClass.hIcon=LoadIcon(hInstance,IDI_APPLICATION);WndClass.hInstance=hInstance;WndClass.lpfnWndPro

温馨提示

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

评论

0/150

提交评论