zoukankan      html  css  js  c++  java
  • 第一个Win32 SDK应用程序

    #include<windows.h>
    int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
    LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);
    // WinMain 函数
    int WINAPI WinMain (HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    HWND hWnd; // 主窗口句柄
    MSG msg; // 窗口消息
    WNDCLASS wc; // 窗口类
    if (!hPrevInstance)
    {
    // 填充窗口类信息
    wc.style=CS_HREDRAW|CS_VREDRAW;
    wc.lpfnWndProc=WndProc;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hInstance=hInstance;
    wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //需要强制转换,原文:wc.hbrBackground=GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName=NULL;
    wc.lpszClassName="SdkDemo1";
    // 注册窗口类
    RegisterClass(&wc);
    }
    // 创建应用程序主窗口
    hWnd=CreateWindow ("SdkDemo1", // 窗口类名
    "第一个Win32 SDK应用程序", // 窗口标题
    WS_OVERLAPPEDWINDOW, // 窗口样式
    CW_USEDEFAULT, // 初始化 x 坐标
    CW_USEDEFAULT, // 初始化 y 坐标
    CW_USEDEFAULT, // 初始化窗口宽度
    CW_USEDEFAULT, // 初始化窗口高度
    NULL, // 父窗口句柄
    NULL, // 窗口菜单句柄
    hInstance, // 程序实例句柄
    NULL); // 创建参数
    // 显示窗口
    ShowWindow(hWnd,SW_SHOW);
    // 更新主窗口客户区
    UpdateWindow(hWnd);
    // 开始消息循环
    while (GetMessage(&msg,NULL,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return msg.wParam;
    }

    // WndProc 主窗口过程
    LRESULT WINAPI WndProc (HWND hWnd,
    UINT msg,
    WPARAM wParam,
    LPARAM lParam)
    {
    HDC hdc;
    RECT rc;
    HPEN hPen,hPenOld;
    HBRUSH hBrush,hBrushOld;
    switch (msg)
    {
    case WM_PAINT:
    hdc=GetDC(hWnd);
    GetClientRect(hWnd,&rc);
    hPen=CreatePen(PS_SOLID,0,RGB(0,0,0));
    hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,0));
    hPenOld=(HPEN)SelectObject(hdc,hPen); //需要强制转换,原文:SelectObject(hdc,hPen);
    hBrushOld=(HBRUSH)SelectObject(hdc,hBrush); //需要强制转换,原文:SelectObject(hdc,hBrush);
    Ellipse(hdc,rc.left,rc.top,rc.right,rc.bottom);
    SelectObject(hdc,hPenOld);
    SelectObject(hdc,hBrushOld);
    ReleaseDC(hWnd,hdc);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    break;
    }
    return DefWindowProc(hWnd,msg,wParam,lParam);
    }


    操作步骤如下:

    1.选择File菜单下的New命令,新建一个Win32 Application工程,这里我们假设对该工程命名为SdkDemo1,而事实上这完全取决于你的意愿。这个过程已经在本书的第一章中作为介绍,这里就不再重复说明了。
    2. 选择Project菜单下的Add To Project|New...命令,向工程中添加一个C++ Source File (C++源文件),可以将该文件命名为winmain.cpp,不需要键入扩展名,Microsoft Developer Studio在创建文件时会自动加上.cpp的后缀名。这个过程也已经在第一章中作过介绍。阅读过该章内容的读者不应感到陌生。然后在Wordspace窗口的FileView中双击文件名winmain.cpp (在依赖于你在前面过程中的设定),输入下面的源代码即可。如果已将源代码输入为C++源文件(以.cpp为后缀名的文件),则可以使用Project|Add To Project|Files...将其添加到工程中。
    3. 单击Build菜单下的Build SdkDemo1.exe或Build All或按下快捷键F7 (如果未对该快捷键做过自定义操作的话)或单击Build或BuildMinibar工具条上的按钮,编译并创建可执行文件SdkDemo1.exe,运行该可执行文件(从Developer Studio中或资源管理器均可)。

    使用这种方式编写的应用程序使用调试和维护的难度很大。这个问题是使用直接使用SDK编程的固有总是。但是,我们还是有办法可以使得该程序的结构更紧凑和更集中一些,从而改善代码的可读性,也使得它更接近于使用SDK编写的真正的Win32应用程序。

  • 相关阅读:
    linux查看CPU和内存信息
    linux yum命令详解
    查看文件中关键字前后几行的内容
    vue.js+web storm安装及第一个vue.js
    android GPS: code should explicitly check to see if permission is available
    ASP.NET MVC Identity 使用自己的SQL Server数据库
    阿里云服务器,tomcat启动,一直卡在At least one JAR was scanned for TLDs yet contained no TLDs就不动了
    ASP.NET MVC4 MVC 当前上下文中不存在名称“Scripts”
    python 将windows字体中的汉字生成图片的方法
    Java android DES+Base64加密解密
  • 原文地址:https://www.cnblogs.com/xiaocai0923/p/2220100.html
Copyright © 2011-2022 走看看