缩小的标签以c+显示+;MFC应用程序 我开发了一些C++ MFC应用程序。在我的对话框中有一个进度条和一个带有常量文本(西里尔字母符号)的标签

缩小的标签以c+显示+;MFC应用程序 我开发了一些C++ MFC应用程序。在我的对话框中有一个进度条和一个带有常量文本(西里尔字母符号)的标签,c++,mfc,C++,Mfc,在Windows 7、XP上,此文本显示良好,但在Windows 8、10上,它以简化形式显示 为什么? 这是在Windows 7上: 这是在Windows 8上: 这是与此对话框窗体相关的类的源代码。 *.cpp文件: // Progress.cpp : implementation file // #include "stdafx.h" #include "LybidLoader.h" #include "Progress.h" #include "afxdialogex.h" /

在Windows 7、XP上,此文本显示良好,但在Windows 8、10上,它以简化形式显示

为什么?

这是在Windows 7上:

这是在Windows 8上:

这是与此对话框窗体相关的类的源代码。 *.cpp文件:

// Progress.cpp : implementation file
//

#include "stdafx.h"
#include "LybidLoader.h"
#include "Progress.h"
#include "afxdialogex.h"


// Progress dialog

IMPLEMENT_DYNAMIC(Progress, CDialogEx)

Progress::Progress(CWnd* pParent /*=NULL*/)
: CDialogEx(Progress::IDD, pParent)
{

}

Progress::~Progress()
{
}

void Progress::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_PROGRESS1, m_ProgressBar);
}


BEGIN_MESSAGE_MAP(Progress, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON1, &Progress::OnBnClickedForceExit)
END_MESSAGE_MAP()


// Progress message handlers


BOOL Progress::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    ModifyStyle( WS_SYSMENU, 0);

    m_ProgressBar.SetMarquee(TRUE, 10);

    return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
}


void Progress::OnBnClickedForceExit()
{   
    if (::MessageBoxW(this->m_hWnd, (LPCWSTR)_T("Ви впевнені? Буде здійснено        аварійний вихід"), (LPCWSTR)_T("Підтвердіть дію"), MB_ICONEXCLAMATION |         MB_YESNO) == IDYES)
    {
        PostQuitMessage(0);
    }           
}


BOOL Progress::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class

    if( pMsg->message == WM_KEYDOWN )
    {
        if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
        {
            return TRUE;                // Do not process further
        }
    }

    return CDialogEx::PreTranslateMessage(pMsg);
}
和*.h文件:

#pragma once
#include "afxcmn.h"


// Progress dialog

class Progress : public CDialogEx
{
    DECLARE_DYNAMIC(Progress)

public:
    Progress(CWnd* pParent = NULL);   // standard constructor
    virtual ~Progress();

// Dialog Data
    enum { IDD = IDD_PROGRESSBAR };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    DECLARE_MESSAGE_MAP()
public:
    virtual BOOL OnInitDialog();
    CProgressCtrl m_ProgressBar;



    afx_msg void OnBnClickedForceExit();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
};
这是参考资料文件的一部分:

IDD_PROGRESSBAR DIALOGEX 0, 0, 369, 105
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE |  WS_CAPTION | WS_SYSMENU
CAPTION "Будь-ласка, зачекайте!"
FONT 8, "Microsoft Sans Serif", 400, 0, 0x1
BEGIN
    CONTROL         "",IDC_PROGRESS1,"msctls_progress32",PBS_MARQUEE | WS_BORDER,7,47,355,14
    LTEXT           "Триває обмін даними з опціональною платою! НЕ ВИМИКАЙТЕ РАДІОСТАНЦІЮ",IDC_STATIC,25,19,267,8
    PUSHBUTTON      "Примусово завершити роботу",IDC_BUTTON1,101,84,118,14
END

忽略以下图像中的垃圾字符,这只是一个代码页问题

为静态文本控件提供的空间太小:

第一个对话框是您的,请修改它,使其看起来像第二个对话框


忽略以下图像中的垃圾字符,这只是一个代码页问题

为静态文本控件提供的空间太小:

第一个对话框是您的,请修改它,使其看起来像第二个对话框


可能是字体DPI,也可能是字体本身。它可能是“Microsoft无衬线”映射到不同的字体。我已经做了足够多的本地化工作,知道有些字体并非在所有系统上都可用。我认为“微软无衬线”可能是这样,但我在远东看到过系统上没有“Arial”


如果我是您,我会在您的对话框资源中将“Microsoft Sans Serif”更改为“MS Shell Dlg”。“MS Shell Dlg”是一种虚拟字体,大致映射到默认的GUI字体。

它可以是字体DPI,也可以是字体本身。它可能是“Microsoft无衬线”映射到不同的字体。我已经做了足够多的本地化工作,知道有些字体并非在所有系统上都可用。我认为“微软无衬线”可能是这样,但我在远东看到过系统上没有“Arial”


如果我是您,我会在您的对话框资源中将“Microsoft Sans Serif”更改为“MS Shell Dlg”。“MS Shell Dlg”是一种虚拟字体,大致映射到默认GUI字体。

您尚未提供有关如何实现此对话框窗口的任何详细信息。因此,如果没有源代码,就很难为您提供帮助。@AndrewKomiagin我添加了一个新的空对话框,并在其中添加了进度条项和一个标签。在标签的属性中,我设置了应该显示的静态文本。。。在我的实现中,只有按钮按下的处理程序。。。如果需要,我可以显示与此对话框窗体相关的类的头文件和cpp文件的源代码。@storojs72:源代码将很好-最好删除无关的详细信息(但请检查简化版本是否仍然存在问题)。不要忘记.rc文件的相关部分。@MartinBonner源代码addedy您还没有提供有关如何实现此对话框窗口的任何详细信息。因此,如果没有源代码,就很难为您提供帮助。@AndrewKomiagin我添加了一个新的空对话框,并在其中添加了进度条项和一个标签。在标签的属性中,我设置了应该显示的静态文本。。。在我的实现中,只有按钮按下的处理程序。。。如果需要,我可以显示与此对话框窗体相关的类的头文件和cpp文件的源代码。@storojs72:源代码将很好-最好删除无关的详细信息(但请检查简化版本是否仍然存在问题)。不要忘了.rc文件的相关部分。@MartinBonner源代码添加在增加/减少两个标签的铭文后,最后一个单词出现在Windows 8上。。。谢谢,但不幸的是,我不明白为什么这个问题发生在Windows 8上-比7更新…从您提供的屏幕副本来看,我想您在Windows 7上使用的DPI为125%,在Windows 8上使用的DPI为100%。(您可以在“控制面板”的“显示”中进行设置)。在不同的DPI设置中,文本占用的空间可能不同。你总是应该给文本留出足够的空间,并留一些空白。我认为你应该把第一行改为“忽略以下图片中的垃圾字符。它是……”(起初我以为你是在告诉OP,他的图片中有垃圾字符).经过几次增加/减少标签上的文字后,最后一个单词出现在Windows 8上。。。谢谢,但不幸的是,我不明白为什么这个问题发生在Windows 8上-比7更新…从您提供的屏幕副本来看,我想您在Windows 7上使用的DPI为125%,在Windows 8上使用的DPI为100%。(您可以在“控制面板”的“显示”中进行设置)。在不同的DPI设置中,文本占用的空间可能不同。你总是应该给文本留出足够的空间,并留一些空白。我认为你应该把第一行改为“忽略以下图片中的垃圾字符。它是…”(起初我以为你是在告诉OP,他的图片中有垃圾字符)。