2016-10-14 6 views
0

C++のMFCアプリケーションを開発しました。私のダイアログボックスには、進行状況バーと定数テキスト(キリル記号)付きのラベルがあります。ラベルがC++のmfcアプリケーションで表示されます

Windows 7、XPではこのテキストは表示されますが、Windows 8,10では縮小された形式で表示されます。

なぜですか?

enter image description here

そして、これは、Windows 8である:

これは、Windows 7上で

enter image description here

これは、このダイアログフォームに関連するクラスのソースコードです。 * .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 
+0

このダイアログウィンドウがどのように実装されているかについての詳細は記載していません。だから、ソースコードなしであなたを助けるのは非常に難しいでしょう。 –

+0

@AndrewKomiagin新しい空のダイアログボックスを追加し、進捗バーと1つのラベルを追加しました。ラベルのプロパティで私は表示する必要がある静的テキストを設定...私の実装では、ボタンプレスのハンドラだけです...必要ならば、このダイアログに関連するクラスのヘッダファイルとcppファイルのソースコードを表示することができます形。 – storojs72

+1

@ storojs72:ソースコードは良いものになります - 好ましくは無関係の詳細を削除してください(ただし、縮小版にはまだ問題があることを確認してください)。 .rcファイルの関連部分も忘れないでください。 –

答えて

4

は、以下の画像では文字化けを無視してくださいそれは単なるコードページの問題です。

あなたは、静的なテキストを提供するスペースが小さすぎコントロール:

最初のダイアログがあなたのものです、それは二番目のように見えるように変更します。

enter image description here

+0

ラベルの碑文の数が増減すると、最終的にWindows 8に最後の単語が現れました...ありがとうございますが、私はunfortunatellyなぜこの問題がWindows 8で発生したのか分かりません。 .. – storojs72

+2

あなたが提供したスクリーンコピーからは、Windows 7では125%、Windows 8では100%のDPIを使用していると思います。(コントロールパネル、ディスプレイでこれを設定できます)異なるDPI設定では、変化する。あなたはいつも余裕を持ってテキストのための十分なスペースを提供するべきです。 –

+0

最初の行を「次の画像のガベージ・キャラクターを無視してください...」と変更する必要があると思います(最初は私が彼の*画像にガベージ・キャラクターを持っているとOPに伝えていたと思いました)。 –

1

それはフォントDPIことができ、またはそれは、フォントそのものである可能性があります。 「Microsoft Sans Serif」は別のフォントにマップすることができます。私はいくつかのフォントがすべてのシステムで利用できないことを知るために十分なローカリゼーションを行ってきました。私は「Microsoft Sans Serif」はおそらくそうだと思うだろうが、「Arial」がシステムにない極東のシステムを見てきた。

私があなたの場合は、ダイアログリソースで「Microsoft Sans Serif」を「MS Shell Dlg」に変更します。 "MS Shell Dlg"は、大まかにデフォルトのGUIフォントにマップする仮想フォントの一種です。