正文

hellowin2007-10-13 10:23:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/jixian/30053.html

分享到:

#include<windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){ static TCHAR szAppName[]=TEXT("HelloWin"); HWND hwnd; //窗口句柄 MSG msg; //消息结构, WNDCLASS wndclass; //窗口类,是一个结构体,下面的这些都是结构体变量 wndclass.style=CS_HREDRAW | CS_VREDRAW;//类风格标识符 //这风格指定在窗口大小改变后,使整个窗口无效 wndclass.lpfnWndProc=WndProc; //lpfn前缀代表指向函数的指针,这里指向 窗口过程函数 wndclass.cbClsExtra=0; //cb前缀代表 count of bytes(字节数) wndclass.cbWndExtra=0;//这两个域用于在类结构和Windows内部保存的窗口结构中预留一些额外空间 wndclass.hInstance=hInstance; //h前缀代表句柄,程序的实例句柄 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//为窗口设置的图标 //LoadIcon 获取预先定义的图标句柄,第一个参数为null,第二个参数标识图标 //如果是加载程序员定制的图标时(图标应该保存磁盘上的.EXE程序文件中) //这个参数应该是程序的实例句柄hInstance wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//hbr前缀代表 刷子的句柄 wndclass.lpszMenuName=NULL;//lpsz前缀代表指向以0结尾的字符串的长指针,窗口类菜单,这里没有。 wndclass.lpszClassName=szAppName; // 窗口类名  if(!RegisterClass(&wndclass)) {  //如果注册不成功,则很可能是定义了unicode标识符在Windows98下运行。  //Windows98不支持,它只支持很少的unicode函数,messagebox 是一个。  MessageBox(NULL,TEXT("This program requires windows NT"),szAppName,MB_ICONERROR);  return 0; }  hwnd=CreateWindow(szAppName,TEXT("The hello program"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,  CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL); /*    hwnd=CreateWindow(szAppName,  //window class name  TEXT("The hello program"),//window caption  WS_OVERLAPPEDWINDOW,      //window style  CW_USEDEFAULT,            //initial x position  CW_USEDEFAULT,            //initial y position  CW_USEDEFAULT,            //initial x size  CW_USEDEFAULT,            //initial y size  NULL,                     //parent window handle  NULL,                     //window menu handle  hInstance,                //program instance handle  NULL);                    //creation parameters  // 可以用这个指针访问以后想要引用的程序中的数据 */       //createwindow 调用后,Windows内部已经创建了这个窗口,但是并未在视频显示器上显示 ShowWindow(hwnd,iCmdShow);//第一个参数:刚创建的窗口句柄, //第二个参数:确定最初 如何在屏幕上显示窗口 //如果是SHOWNORMAL,则窗口的客户区域就被窗口类中定义的背景刷子所覆盖 UpdateWindow(hwnd);    //导致客户区被绘制,它通过给窗口过程发送WM_PINT消息来做到这点。 //为什么showwindow不一步到位显示到屏幕中?窗口过程的作用将显现出来。 //因为窗口客户区经常变,其他区不常该。 while(GetMessage(&msg,NULL,0,0)) {  //只要从消息队列中取出的message域不为WM_QUIT,getmessage就返回一个非零值  //GetMessage(&msg,NULL,0,0) 第2 3 4 个参数设为null或0表示程序  //接受它创建的所有窗口的所有消息  TranslateMessage(&msg);//将msg结构传给Windows,进行一些键盘转换  DispatchMessage(&msg);//又将msg结构回传给Windows。然后Windows   //将该消息发送给适当的窗口过程 } return msg.wParam; //结构的wParam域是传递给PostQuitMessage函数的值(通常是0)} //一个窗口过程总是与调用registerclass注册的特定窗口类相关联//createwindow函数根据特定的窗口类创建一个窗口,但基于一个窗口类,可以创建多个窗口 //程序通常不直接调用窗口过程。窗口过程通常由Windows本身调用。//通过调用SendMessage函数,程序能够直接调用它的窗口过程。LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){//瞧瞧它的参数,跟msg前4个参数一样  HDC hdc;//设备描述表句柄 PAINTSTRUCT ps; //PAINTSTRUCT结构中包含一些窗口过程,可以用来刷新客户区域的内容 RECT rect;//该结构有4个LONG域,分别是left,top,right,bottom switch(message) {  //窗口过程不予处理的所有消息应该被传给名为DefWindowProc的Windows函数  //从DefWindowProc返回的值必须由窗口过程返回 case WM_CREATE:PlaySound(TEXT("Hellowin.wav"),NULL,SND_FILENAME | SND_ASYNC);  return 0;  //PlaySound 第一个参数:声音文件,第二参数:当声音文件是一种资源时才被使用  //第三个参数指定一些选项  //窗口过程在处理消息时,必须返回0 case WM_PAINT:  hdc=BeginPaint(hwnd,&ps);//BeginPaint调用后使整个客户区域有效,并返回设备描述表  GetClientRect(hwnd,&rect);//将4个域设置为客户区域的尺寸  //left和top通常设置为0,right和buttom域设置为客户区域的宽度和高度(像素点数)  DrawText(hdc,TEXT("Hello,windows 98!"),-1,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);  //DrawText 第二参数:要输出的文本,第三参数:指示文本串是以字节0终结的。  //最后一个参数指定了:输出文本 必须显示在一行上,  //水平方向和垂直方向都位于第4个参数指定的矩形的中央  EndPaint(hwnd,&ps);  return 0; case WM_DESTROY:  PostQuitMessage(0);//该函数在消息队列中插入WM_QUIT消息  return 0; } return DefWindowProc(hwnd,message,wParam,lParam);} //MSG 结构体/*typedef struct tagMSG{ HWND hwnd; //消息发送的窗口句柄,与createwindow返回的hwnd值相同 UINT message; //消息标识符。这是一个数值,用以表示消息,对于每个消息均有一个对应的标识符。 //这些消息以前缀WM开头 WPARAM wParam;//32位的消息参数,其含义和数值根据消息的不同而不同 LPARAM lParam;//一个32位的消息参数,其值与消息有关 DWORD time;//消息放入消息队列中的时间 POINT pt;//消息放入消息队列时的鼠标坐标}MSGM,*PMSG;*/ 

阅读(2589) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册