• 第一个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应用程序。

  • 相关阅读:
    以&quot;小刀会“的成败论当今创业成败
    COCOS2D 学习笔记
    password加密的算法
    bzoj1087【SCOI2005】互不侵犯King
    HDU--2222--Keywords Search--AC自己主动机
    【leetcode】Subsets II (middle) ☆
    【leetcode】Word Search (middle)
    【hadoop2.6.0】利用JAVA API 实现数据上传
    【leetcode】Palindrome Partitioning II(hard) ☆
    【hadoop2.6.0】利用Hadoop的 Java API
  • 原文地址:https://www.cnblogs.com/xiaocai0923/p/2220100.html
Copyright © 2020-2023  润新知