背景知识:我主要是一名 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/