小编Lau*_*ren的帖子

设计一个适用于所有分辨率的 MFC 应用程序?

我目前正在为 Windows 设计我的第一个 GUI。我正在使用 MFC 和 Visual Studio 2008。我一直在设计我的程序的显示器具有 1680x1050 的原始分辨率。如果我编译并将我的程序发送给我的一位同事以在他们的计算机上运行(通常是一台以 1024x768 运行的笔记本电脑),我的程序将无法显示在他们的屏幕上。

我一直在努力阅读如何设计 MFC 应用程序,以便它可以在所有分辨率下运行,但我一直在发现误导性信息。在我看来,DLU 似乎应该为您调整应用程序的大小,并且唯一应该遇到问题的情况是当您拥有一个需要担心其分辨率的实际位图时。但如果是这种情况,当我将显示器设置为较低的分辨率时,为什么我的程序不再适合我的屏幕?我的程序没有“缩小”以占用与它在 1680x1050 时使用的屏幕空间相同的数量,而是变得巨大而颗粒状。

这里的“明显”解决方案是将我的分辨率设置为 1024x768 并重新设计我的程序以适应屏幕。除了我已经尽可能地压缩对话框中的所有内容,以尝试让我的程序适合以 1024x768 运行的屏幕。我的对话框字体设置为 Microsoft Sans Serif 8,但在 1024x768 下运行时仍然显得很大(远大于 8 磅)。

我知道必须有一种方法可以让我的程序保持相同的缩放比例……对吗?或者这是解决问题的错误方法?设计 MFC 程序以便它可以在多种分辨率(例如 800x600 及更高)上运行的正确/标准方法是什么?

scaling mfc resolution visual-c++

5
推荐指数
1
解决办法
6202
查看次数

SetWindowPos()函数没有移动窗口?

我有一个对话框,我想放在另一个对话框和相对于主对话框上的一个控件的位置.

void CspAceDlg::DrawResultsArea()
{
    CWnd* pTabCtl = GetDlgItem(IDC_BUILDTABS);
    CRect rectTabCtl; // Allocate CRect for control's position.
    pTabCtl->GetWindowRect(&rectTabCtl);
    int resX = rectTabCtl.right + 15;
    int resY = rectTabCtl.top;
    //RESULTS AREA
    results.Create(IDD_RESULTSDIALOG, this);
    results.SetWindowPos(this, resX, resY, /*608, 19, */175, 135, SWP_SHOWWINDOW);
    results.ShowWindow(SW_SHOW);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我的对话框资源(IDD_REULTSDIALOG)具有名为X Pos和Y Pos的属性,它们似乎覆盖了我的SetWindowPos()(资源编辑器中的小属性选项卡不允许我将这些留空).如果我将这些属性设置为0,0我的对话框将出现在主对话框的左上角.如果我将它们设置为一个数字我可以猜测 - 并且测试将它大致放在我想要的位置,但是然后在不同的分辨率下运行应用程序会导致对话框出现在不同的位置.我真正想要做的是将对话框相对于我的主对话框上的另一个控件(在本例中为我的选项卡控件).为什么我的SetWindowPos()被忽略,我该如何解决这个问题?我应该使用不同的功能吗?

mfc visual-c++

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

mfc ×2

visual-c++ ×2

resolution ×1

scaling ×1