千张笔记

Email:rain_qian830@163.com
posts - 28, comments - 42, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

<1>.入口函数WinMain中的代码

1.窗口类WNDCLASS
  设置窗口的各个参数
  WNDCLASS wndcls;
  wndcls.cbClsExtra=0;
  wndcls.cbWndExtra=0;
  wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);   //指定窗体的颜色。(画刷)
  wndcls.hCursor=LoadCursor(0,IDC_IBEAM);
  wndcls.hIcon=LoadIcon(0,IDI_WARNING);
  wndcls.hInstance=hInstance;
  wndcls.lpfnWndProc=WinSunProc;
  wndcls.lpszClassName="myfirst2006";
  wndcls.lpszMenuName=NULL;
  wndcls.style=CS_HREDRAW | CS_VREDRAW;
2.注册窗口函数
  RegisterClass(&wndcls);
3.产生窗口
  HWND hwnd;
  hwnd=CreateWindow("myfirst2006","我的第一个窗口!",WS_OVERLAPPEDWINDOW,
                                   100,100,600,400,NULL,NULL,hInstance,NULL);
4.显示窗口
  ShowWindow(hwnd,SW_SHOWNORMAL);
5.更新窗口
  UpdateWindow(hwnd);
6.消息循环
  MSG msg;
  while(GetMessage(&msg,NULL,0,0))
  {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
  }
  TranslateMessage转换消息,转换WM_CHAR消息,若不用,则不能收到WM_CHAR消息。
  DispatchMessage将消息分发出去,将收到的消息传到操作系统,然后操作系统调用窗口过程函数,也就是对 设计窗口时的回调函数进行处理。
 
<2>.回调函数WinSunProc中的代码:
   举个例子:
   switch(uMsg)
   {
         case WM_CHAR:
                            char szchar[20];
                            sprintf(szchar,"char is %d",wParam);
                            MessageBox(hwnd,szchar,"myfirst2006",0);
                            break;
         case WM_LBUTTONDOWN:
                            MessageBox(hwnd,"mouse click","myfirst",0);
                            HDC hdc;
                            hdc=GetDC(hwnd);
                            TextOut(hdc,100,100,"这是我的第一个窗口,哈哈!",strlen("这是我的第一个窗口,哈哈!"));
                            ReleaseDC(hwnd,hdc);
                            break;
         case WM_PAINT:
                            HDC hDc;
                            PAINTSTRUCT ps;
                            hDc=BeginPaint(hwnd,&ps);
                            TextOut(hDc,50,50,"hello my windows!",strlen("hello my windows!"));
                            EndPaint(hwnd,&ps);
                            break;
         case WM_CLOSE:
                            if(IDYES==MessageBox(hwnd,"是否真的退出程序?","myfirst",MB_YESNO))
                           {
                                    DestroyWindow(hwnd);
                           }
                            break;
         case WM_DESTROY:
                          PostQuitMessage(0);
                          break;
                         default:
                         return DefWindowProc(hwnd,uMsg,wParam,lParam);
   }
      uMsg为消息标识符
      WM_CHAR消息为字符类消息
      WM_LBUTTONDOWN为鼠标消息,WM_PAINT为窗口重绘消息,当窗口大小发生变化时,点鼠标左键出来的那行文字又没有了,因为窗口又重新粉刷了一遍
      WM_CLOSE为关闭窗口的消息
      WM_DESTROY为销毁窗口的消息。

     HDC是一个DC的句柄,它将窗口与GDI(Graphics Device Interface图像设备接口)连接起来,如果程序需要在窗 口上绘制图形,则需要建立一个DC设备,即定义一个HDC变量。
    在生成窗口时,HWND使操作系统分配的句柄与我的窗口相关并保存。
    HINSTANCE产生了一个与我们的程序相关的实例,HINSTANCE变量是操作系统给其赋值。

Feedback

# re: 【原】产生一个窗口的过程(win32应用程序)  回复  更多评论   

2008-10-18 15:57 by tanguo
乐于分享,偶的http://blog.csdn.net/tanguofu

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理