WINCE下窗口的创建

http://blog.csdn.net/lanyzh0909/article/details/5756023


窗口的创建一般分为以下几步:
      1、实例化一个WNDCLASS(WNDCLASSEX)对象
      2、调用RegisterClass(RegisterClassEx)函数注册窗口类
      3、调用CreateWindow(CreateWindowEx)方法创建窗口
      4、调用ShowWindow(hwnd,SW_SHOWNORMAL)设置窗口详细显示状态
      5、调用UpdateWindow(hwnd)刷新显示窗口

      6、进入消息循环等待消息

函数作用:

      RegisterClass函数:通知系统我们要定义一个新的窗口类型,系统会为我们新的窗口类型分配相应的内存空间记录新窗口类的信息。

      CreateWindow函数:创建一个新类型的窗体。基于此同一类型的窗体都具有相同的属性,比如,背景色,光标,图标等等。

      ShowWindow函数:将我们创建的窗口显示到显示器上。

      UpdateWindow函数:强制客户区域无效,给窗口过程发送一个WM_PAINT消息。

实现代码:

 

helloce.h

[cpp]  view plain copy
  1. /*************************************************************/  
  2. #define  dim(x) (sizeof(x)/sizeof(x[0]))  
  3.   
  4. /*************************************************************/  
  5. struct decodeUINT  
  6. {  
  7.     UINT Code;  
  8.     LRESULT (*Fxn)(HWND,UINT,WPARAM,LPARAM);  
  9. };  
  10.   
  11. /*************************************************************/  
  12. HWND InitInstance(HINSTANCE,LPWSTR,int);  
  13. int TermInstance(HINSTANCE,int);  
  14.   
  15. DWORD WINAPI PaintThrd(PVOID pArg);  
  16.   
  17. /*************************************************************/  
  18. LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);  
  19. LRESULT DoPaintMain(HWND,UINT,WPARAM,LPARAM);  
  20. LRESULT DoDestroyMain(HWND,UINT,WPARAM,LPARAM);  
  21. LRESULT DoEraseBkgndMian(HWND,UINT,WPARAM,LPARAM);  

 

helloce.cpp

 

[cpp]  view plain copy
  1. // helloce.cpp : Defines the entry point for the application.  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include "helloce.h"  
  6. #include "resource.h"   
  7.   
  8.   
  9. const TCHAR szAppName[]=TEXT("Hello CE");  
  10. HINSTANCE hInst;  
  11.   
  12. // Message dispatch table for MainWindowProc  
  13. const struct decodeUINT MainMessages[] =  
  14. {  
  15.     WM_PAINT,DoPaintMain,  
  16.     WM_DESTROY,DoDestroyMain,  
  17.     WM_ERASEBKGND,DoEraseBkgndMian,  
  18. };  
  19.   
  20. int WINAPI WinMain( HINSTANCE hInstance,  
  21.                     HINSTANCE hPrevInstance,  
  22.                     LPTSTR    lpCmdLine,  
  23.                     int       nCmdShow)  
  24. {  
  25.     MSG msg;  
  26.     int rc =0;  
  27.     HWND hwndMain;  
  28.   
  29.     hwndMain =InitInstance(hInstance,lpCmdLine,nCmdShow);  
  30.     if(hwndMain == 0) return 0x10;  
  31.     while(GetMessage(&msg,NULL,0,0))  
  32.     {  
  33.        TranslateMessage(&msg);  
  34.        DispatchMessage(&msg);  
  35.     }  
  36.     return TermInstance(hInstance,msg.wParam);  
  37. }  
  38.   
  39. HWND InitInstance(HINSTANCE hInstance,LPWSTR lpCmdLine,int nCmdShow)  
  40. {  
  41.     WNDCLASS wc;  
  42.     HWND hWnd;  
  43.       
  44.     hInst = hInstance;  
  45. #if defined(WIN32_PLATFORM_PSPC)||defined(WIN32_PLATFORM_WFSP)  
  46.     hWnd =FindWindow(szAppName,NULL);  
  47.     if(hWnd)  
  48.     {  
  49.         SetForegroundWindow((HWND)(((DWORD)hWnd)|0x01));  
  50.         return 0;  
  51.     }  
  52.   
  53. #endif  
  54.     //register application main window class   
  55.     wc.style = 0;  
  56.     wc.lpfnWndProc =MainWndProc;  
  57.     wc.cbClsExtra = 0;  
  58.     wc.cbWndExtra =0;  
  59.     wc.hInstance =hInstance;  
  60.     wc.hIcon = NULL;  
  61.     wc.hCursor =LoadCursor(NULL,IDC_ARROW);  
  62.     wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);  
  63.     wc.lpszMenuName = NULL;  
  64.     wc.lpszClassName = szAppName;  
  65.     if(RegisterClass(&wc) == 0) return 0;  
  66.     hWnd = CreateWindow(szAppName,  
  67.                           TEXT("Hello Win CE"),  
  68.                           WS_VISIBLE|WS_CAPTION|WS_SYSMENU,  
  69.                           CW_USEDEFAULT,  
  70.                           CW_USEDEFAULT,  
  71.                           CW_USEDEFAULT,  
  72.                           CW_USEDEFAULT,  
  73.                           NULL,  
  74.                           NULL,  
  75.                           hInstance,  
  76.                           NULL  
  77.                           );  
  78.     if(!IsWindow(hWnd)) return 0;  
  79.       
  80.     ShowWindow(hWnd,nCmdShow);  
  81.     UpdateWindow(hWnd);  
  82.     return hWnd;  
  83. }  
  84.   
  85. int TermInstance( HINSTANCE hInstance,int nDefRC)  
  86. {  
  87.     return nDefRC;  
  88. }  
  89.   
  90. LRESULT CALLBACK MainWndProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam)  
  91. {  
  92.     INT i;  
  93.     for(i =0; i<dim(MainMessages);i++)  
  94.     {  
  95.         if(wMsg == MainMessages[i].Code)  
  96.             return (*MainMessages[i].Fxn)(hWnd,wMsg,wParam,lParam);  
  97.     }  
  98.     return DefWindowProc(hWnd,wMsg,wParam,lParam);  
  99. }  
  100.   
  101. LRESULT DoPaintMain(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam)  
  102. {  
  103.     PAINTSTRUCT ps;  
  104.     RECT rect;  
  105.     HDC hdc;  
  106.       
  107.     GetClientRect(hWnd,&rect);  
  108.     hdc =BeginPaint(hWnd,&ps);  
  109.   
  110.     int iOldMode = ::SetBkMode(hdc,TRANSPARENT);  
  111.     DrawText(hdc,TEXT("Hello windows ce !!"),-1,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);  
  112.     ::SetBkMode(hdc,iOldMode);  
  113.   
  114.     EndPaint(hWnd,&ps);  
  115.     return 0;  
  116. }  
  117.   
  118. LRESULT DoDestroyMain(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam)  
  119. {  
  120.     PostQuitMessage(0);  
  121.     return 0;  
  122. }  
  123.   
  124.   
  125. LRESULT DoEraseBkgndMian(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam)  
  126. {  
  127.     return 0;  
  128. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值