windows-sdk编程-从简单的对话框开始

      从最初的DOS时代到现在这么绚丽的windows时代,其中技术是在一步一步前进着,要想把windows下的程序给写好,还是需要去从windows的sdk及其汇编开始走起,只能这样才能一步步的学好windows开发,更好的学习伟大的windows机制,

    首先还是从我们的桌面应用程序开始,显示一个伟大的窗口,需要创建窗口的几个步骤:

  • 得到命令行参数(如果您想从命令行得到参数,可选);
  • 注册窗口类(必需,除非您使用 Windows 预定义的窗口类,如 MessageBox 或 dialog box;
  • 产生窗口(必需);
  • 在桌面显示窗口(必需,除非您不想立即显示它);
  • 刷新窗口客户区;
  • 进入无限的获取窗口消息的循环;
  • 如果有消息到达,由负责该窗口的窗口回调函数处理;
  • 如果用户关闭窗口,进行退出处理。

在整个窗口从生到死的过程中需要走这些步骤的接下来按照上面的思路进行进行代码学习:

#include <Windows.h>

#include <tchar.h>

HWND hWinMain;
TCHAR szClassName[] = _T("MyClass");
TCHAR szCaptionMain[] = _T("My First Window!");
TCHAR szText[] = _T("Win32 program, Simple and powerful !");
WNDCLASSEX stdWndClass;

//如果有消息到达,由负责该窗口的窗口回调函数处理

LRESULT CALLBACK ProcWinMain(   HWND hWnd, 
                       UINT Msg, 
                       WPARAM wParam, 
                       LPARAM lParam 
)
{
        switch(Msg)
        {

          //如果用户关闭窗口,进行退出处理

           case WM_CLOSE:
           {
                 DestroyWindow(hWinMain);
                 PostQuitMessage(NULL);
           }
            break;

          default:
              return DefWindowProc(hWnd, Msg, wParam, lParam ); 
      }
     return 0;
}


int WINAPI WinMain(     HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,
                        int nCmdShow
)
{
       MSG stMsg;
       WNDCLASSEX stdWndClass;
       RtlZeroMemory(&stdWndClass, sizeof(stdWndClass));
       stdWndClass.hCursor = LoadCursor(0,IDC_ARROW);
       stdWndClass.cbSize = sizeof(stdWndClass);
       stdWndClass.style = CS_HREDRAW|CS_VREDRAW;
       stdWndClass.lpfnWndProc = ProcWinMain;
       stdWndClass.hbrBackground = (HBRUSH)COLOR_WINDOW;
       stdWndClass.lpszClassName = szClassName;
       stdWndClass.hInstance = hInstance;

       //注册窗口

     RegisterClassEx(&stdWndClass);

       //产生窗口

       hWinMain = CreateWindowEx(WS_EX_CLIENTEDGE,szClassName,szCaptionMain,\
                        WS_OVERLAPPEDWINDOW,100,100,600,400,NULL,NULL,hInstance,NULL);

       if(!hWinMain)
             return 0;


        //在桌面显示窗口
        ShowWindow(hWinMain,SW_SHOWNORMAL);

        //刷新窗口客户区
        UpdateWindow(hWinMain);

       //进入无限的获取窗口消息的循环
       while(GetMessage(&stMsg,NULL,0,0))
       {
             TranslateMessage(&stMsg);
             DispatchMessage(&stMsg);
       }

       return stMsg.wParam;
}

从上面的简单代码当中,可以看到其实windows程序的结构也是和控制台的程序类似的

通过上面的代码,在以后的使用的过程中我们可以讲其作为一种模板来用,一个简单的窗口展现在我们的面前~~~

posted on 2013-01-27 22:09  AAAAAApple  阅读(821)  评论(0编辑  收藏  举报

导航