c++ - 如何开始在 Win32 上使用 Winforms 风格的应用程序?

标签 c++ windows user-interface

背景知识:我主要是一名 C++ 程序员,但我做过的唯一 GUI 工作是在 .NET 的 WinForms 平台上进行的。我对 Windows GUI 编程完全陌生,尽管 Petzold 的书很棒,但我还是非常困惑。

即,似乎大多数关于 Win32 入门的引用资料都是关于绘制直线和曲线之类的东西——我对此(至少目前)并不关心。

我需要一个选中的列表框、一个拆分器和一个文本框——这在 Winforms 领域需要不到 10 分钟的时间来完成。有人向我推荐使用 WTL 库,它提供了所有这三个控件的实现——但我一直被一些简单的事情所困扰,比如 getting the controls to use the right font。 , 和 getting High DPI working correctly .我在这上面花了两天时间,我忍不住认为对于这类事情必须有比我能找到的更好的引用。 Petzold 的书很好,但自从 Windows 95 天以来就没有更新过,并且有很多更改 w.r.t.自发布以来应如何正确开发应用程序。

我猜我要找的是现代 Petzold 的书。我在哪里可以找到这样的资源(如果有)?

最佳答案

首先,几乎没有(我能找到的)解释如何使用 WTL 的文档。它似乎是专家图书馆,为专家服务。

然后您的选择是:使用 MFC 应用程序向导创建应用程序,或采用 Win32 API 路线。 Win32 API 本身是一个 C API,MFC 是一个围绕 C Win32 API 的 C++ 包装器,添加了一个文档 View 应用程序模型。

但是,不是从代码创建控件: native Windows API 与“WinForm”最接近的模拟是对话框。对话框在链接到您正在开发的 EXE 或 DLL 期间嵌入的资源文件中进行布局。对话框资源采用自动应用于对话框上所有控件的字体设置,对话框根据对话框单位而不是像素进行布局,允许它们相对于字体和用户系统上的 dpi 设置自动缩放.

如果您创建了一个对话框资源,并将其添加到一个简单的应用程序中,将对话框显示在屏幕上并响应单击 OK 按钮关闭它看起来并不比这更复杂。

#include <windows.h>
#include "resource.h"

BOOL CALLBACK MyDialogProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
  switch(uMsg){
  case WM_INITDIALOG:
    return TRUE;
  case WM_COMMAND:
    switch(LOWORD(wParam){
    case IDOK:
      EndDialog(hwnd,wParam);
    }
    return TRUE;
  }
  return FALSE;
}

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hNull,LPCTSTR strCmdLine,int nCmdShow)
{
  return DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,&DialogProc,0l);
}

关于c++ - 如何开始在 Win32 上使用 Winforms 风格的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577365/

相关文章:

javascript - 条形码扫描仪和 2 个提交按钮

c++ - 对右值的非常量引用

c++ - 使用相同的 fstream 读取和写入相同的文件

c++ - zlib 的 uncompress() 奇怪地返回 Z_BUF_ERROR

windows - MSB3481 证书错误

windows - 是否可以将 Windows Azure Mobile 服务与需要关系数据库的 Windows 8 应用程序一起使用?

c++ - 编译器如何生成模板类定义?

windows - 类未注册 HRESULT 0x80040154

Python Tkinter 滚动条问题

jQuery Datetimepicker - 单击时更改 minDateTime 和 maxDateTime?