zoukankan      html  css  js  c++  java
  • windowssdk编程从简单的对话框开始

          从最初的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程序的结构也是和控制台的程序类似的

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

  • 相关阅读:
    C# WinForm界面上实现按条件检索数据
    DevExpress中XtraEditors.RadioGroup 控件如何保存获取选中的值及读取数据库中的值
    在QTP Test中利用vbs和cmd实现重新启动QTP
    VBS操作Excel的一点问题总结
    利用vbs维护qtp的虚拟对象的坐标
    Smoke Test和BVT Test的区别
    小结一下VS2012新开发环境的设置经历
    关闭EF4.x Code First的级联删除Cascade Delete
    关于Entity Framework 4.0/4.1数据验证的一点体会
    CentOS 6.3 Minimal yum 安装 PostgreSQL 9.2.3
  • 原文地址:https://www.cnblogs.com/OneDream/p/2879133.html
Copyright © 2011-2022 走看看