windows,定义结构体,规范_第1页
windows,定义结构体,规范_第2页
windows,定义结构体,规范_第3页
windows,定义结构体,规范_第4页
windows,定义结构体,规范_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

windows,定义结构体,规范篇一:windows 程序基本结构#include /包含文件 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); /WndProc 窗口函数的原型说明 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) /入口函数 /1.下面是定义变量 static TCHAR szAppName=TEXT(“HelloWin“); /*把形成的应用程序名存放在静态字态数组,填写窗口类时作为窗口类名*/ HWND hwnd; /定义代号 MSG msg;/定义存放消息的 MSG 结构变量 WNDCLASS wndclass; / wndclass;/定义窗口类变量 /3.下面是填写窗口类结构各条款,形成初始化的窗口类 =CS_HREDRAW | CS_VREDRAW;/显示窗口的样式 wndclas(来自: 小龙文 档网:windows,定义结构体,规范)=WndProc; /窗口函数的地址 =0;/额外空间 =0;/额外空间 =hInstance; /实例代号 =LoadIcon(NULL,IDI_APPLICATION);/载入图标 =LoadCursor(NULL,IDC_ARROW); /载入鼠标 =(HBRUSH)GetStockObject(WHITE_BRUSH); /背景画刷 =NULL; /菜单名 =szAppName; /窗口类名 /*4.下面对填写好的窗口类进行注册,注册失败则输出信息,并返回 WINDOWS 操作系统。注册成功,则跳过 if循环*/ if(!RegisterClass( return 0; /注册不成功,返回操作系统 /5.下面是根据注册成功的窗口类创建窗口 hwnd=CreateWindow(szAppName, /创 建窗口时用的窗口类别 TEXT(“The hello program“),/窗口标题 WS_OVERLAPPEDWINDOW,/窗口式样CW_USEDEFAULT,/窗口 x 坐标 CW_USEDEFAULT,/窗口 y 坐标CW_USEDEFAULT,/窗口 x 方向的大小 CW_USEDEFAULT,/窗口 y 方向的大小 NULL,/父窗口代号 NULL,/菜单代号 hInstance, /实例代号 NULL); /创建时的附加参数 /6.在屏幕上显示窗口 ShowWindow(hwnd,iCmdShow); /显示 windows 窗口 UpdateWindow(hwnd);/修改 windows 窗口 /7.消息循环 while(GetMessage( /翻译键盘消息 DispatchMessage( /把信息送到应用程序的窗口函数 return ; /带着 MSG 的 wpara 参数返回操作系统 /窗口函数 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) HDC hdc; /设备描述代号 PAINTSTRUCT ps;/保存绘图消息的结构 RECTrect;/矩形结构/消息处理分支 switch(message)/根据消息进行下面的处理 case WM_CREATE:/主程序执行CreateWindow 时 windows 发出此消息 /下面函数的功能是把“”中的音乐放出来 PlaySound(TEXT(“),NULL,SND_FILENAME|SND_ASYNC); return 0; WinMain 中的消息循环 case WM_PAINT: 主程序执行 showwindow 时windows 发出此消息 hdc=BeginPaint(hwnd, 始在 ps指示的区域内画图 GetClientRect(hwnd, 客户区的大小到 rect /下面函数的功能是在屏幕的中央显示“hello,windows 98!”DrawText(hdc,TEXT(“Hello,windows 98!“),-1,/DT 是drawtext 函数专用的识别字 EndPaint(hwnd, 画图,释放设备描述表代号 return 0;winmain 中的消息循环 case WM_DESTROY:PostQuitMessage(0); WM_QUIET 发送到应用程序消息队列 return 0;winmain 中的消息循环 return DefWindowProc(hwnd,message,wParam,lParam);理 /上面消息的不尽处理都有 defwindowproc 函数处理 /返回/ /开 /取得/在屏幕 /结束 /返回 /把 /返回/默认处 篇二:Windows 应用程序的结构Windows 应用程序的结构 1、Windows 应用程序的主函数名称为 WinMain,其原型声明为: int WINAPI WinMain(HINSTANCE hInstance,/当前应用程序实例的句柄 HINSTANCE PreInstance, /前一个应用程序实例的句柄 LPSTR lpCmdLine,/指向本程序命令行的指针 int nCmdShow);/决定应用程序窗口显示方式的标志 注:关键字 WINAPI 表明这是一个由系统调用的函数,这种被系统调用的函数也叫回调 函数,关键字 WINAPI 也可以换为 CALLBACK。 2、窗口类型结构变量的声明为: typedef struct _WNDCLASS UINT style;/窗口样式,一般设置为 0 WNDPROC lpfnWndProc;/指向窗口函数的指针 int cbClsExtra; /一般设置为 0 int cbWndExtra; /一般设置为 0 HANDLE hInstance; /定义应用程序的实例句柄 HICONhIcon;/窗口的图标 HCURSOR hCursor; /窗口的光标 HBRUSH hbrBackground; /窗口的背景颜色 LPCTSTR lpszMenuName; /窗口的菜单资源名 LPCTSTR lpszClassName; /窗口类型名 WNDCLASS; 注:第二个参数 lpfnWndProc 是一个函数指针,系统在获得消息后根据这个指针去调用 窗口函数来处理消息,应用程序的窗口就是依靠这个指针与窗口函数建立联系的。一个窗口只能有一个窗口函数,但多个窗口可以共用同一个窗口函数。 3、创建窗口之前,要用窗口类型注册函数把定义好的窗口向系统进行登记,该函数的原型 声明为: BOOL RegisterClass(WNDCLASS 其中参数 wc 是一个窗口类型的结构变量。 4、程序使用 API 函数 CreateWindow()来创建窗口,该函数的原型声明为: HWND CreateWindow(LPCTSTR lpClassName,/窗口类型名 LPCTSTR lpWindowName, /窗口实例的标题 DWORDdwStyle, /窗口风格 int x, /窗口左上角位置坐标值 x int y, /窗口左上角位置坐标值 y int nWidth, /窗口的宽度 int nHeight, /窗口的高度 HWND hWndParent, /父窗口的句柄 HMENUhMenu,/主菜单的句柄 HANDLE hInstance, /应用程序实例句柄 LPVOID lpParam);/该值为 NULL 注:创建窗口成功之后,函数返回窗口的句柄。如果应用程序使用该窗口,该句柄应事 先保存在先定义的句柄变量中。 5、创建窗口后,使用下面两个函数显示窗口:BOOL ShowWindow(HWND hWnd,/窗口句柄 int nCmdShow); /窗口的显示方式 BOOL UpdateWindow(HWND hWnd); 6、消息循环: while(GetMessage( DispatchMessage( 注:GetMessage()用来从消息队列获取消息,获取的消息存放在 MSG 类型变量 msg 中,TranslateMessage()用来把键盘消息转换为字符消息, DispatchMessage()用来向系统派送消息。 7、具有窗口界面的 Windows 应用程序,必须有窗口函数来处理各种消息,它是完成用户任 务的核心,该函数的定义为: LRESULT CALLBACK WndProc( HWND hwnd, /派送消息的窗口句柄 UINT message, /系统传递来的消息标识 WPARAM wParam, /消息的附加参数 LPARAM lParam); /消息的附加参数 8、小结: 1)Windows 应用程序是靠消息来驱动的,消息是一个描述事件的结构; 2)在 Windows 应用程序的主函数中,首先要注册窗口类型,然后创建并显示窗口。 创建窗口后程序就进入消息循环,在消息循环中,程序不断地获得消息并将消息 派送给对应的窗口函数进行处理; 3)窗口函数是处理消息的地方,它为 switch-case结构,每一个 case 对应一段消息 响应代码; 4)Windows 规定,向窗口用户区输出图形必须在窗口函数 WM_PAINT 消息所对应的程 序段中执行。产生WM_PAINT 消息的两种情况:A、窗口在屏幕上刚显示的一瞬间; B、窗口发生更新消息时。 下面是我写的一个简单但很典型的例子: #include /窗口函数原型声明; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HWND hwnd1;/Windows1 的窗口句柄; HWND hwnd2;/Windows2 的窗口句柄; HWND hwnd3;/Windows3 的窗口句柄; char *ShowText; /主函数; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PreInstance, LPSTR lpCmdLine, int nCmdShow) MSG msg; /定义、注册窗口类型“窗口 1“; char lpszClassName1=“窗口 1“; WNDCLASS wc1; =0; =WndProc; =0; =0; =hInstance; =LoadIcon(NULL,IDI_APPLICATION); =LoadCursor(NULL,IDC_CROSS); =(HBRUSH)GetStockObject(WHITE_BRUSH); =NULL; =lpszClassName1; RegisterClass( /定义、注册窗口类型“窗口 2“; char lpszClassName2=“窗口 2“; WNDCLASS wc2; =0; =WndProc; =0; =0; =hInstance; =LoadIcon(NULL,IDI_HAND); =LoadCursor(NULL,IDC_ARROW); =(HBRUSH)GetStockObject(GRAY_BRUSH); =NULL; =lpszClassName2; RegisterClass(/创建 Windows1 窗口; hwnd1=CreateWindow(lpszClassName1, “Windows1“, WS_OVERLAPPEDWINDOW, 100,50,700,500, NULL, NULL, hInstance, NULL); /创建 Windows2 窗口; hwnd2=CreateWindow(lpszClassName2, “Windows2“, WS_OVERLAPPEDWINDOW, 140,100,660,450, NULL, NULL, hInstance, NULL); /创建 Windows3 窗口; hwnd3=CreateWindow(lpszClassName1, “Windows3“, WS_OVERLAPPEDWINDOW, 180,150,620,400, NULL, NULL, hInstance, NULL); /显示 Windows1; ShowWindow(hwnd1,nCmdShow); UpdateWindow(hwnd1); /显示 Windows2; ShowWindow(hwnd2,nCmdShow); UpdateWindow(hwnd2); /显示 Windows3; ShowWindow(hwnd3,nCmdShow); UpdateWindow(hwnd3); /消息循环; while(GetMessage( DispatchMessage( return ; void OnLButtonDown(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam) if(hwnd=hwnd1) ShowText=“Hello,Windows1!“; else if(hwnd=hwnd2) ShowText=“Hello,Windows2!“; else if(hwnd=hwnd3) ShowText=“Hello,Windows3!“; els

温馨提示

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

评论

0/150

提交评论