当“语言”设置为日语时,自定义 MFC 控件的大小出现问题

Problem with size of custom MFC control when Language is set to Japanese

提问人:David Partridge 提问时间:11/4/2023 最后编辑:David Partridge 更新时间:11/9/2023 访问量:90

问:

我负责 DeepSkyStacker 应用程序。

如果系统语言设置为英语,则DeepSkyStacker将自己的语言设置为英语,并且其“处理”面板(右侧)正确显示:

English

如果系统语言设置为日语,则DeepSkyStacker将自己的语言设置为英语,因为没有完成日语翻译,因此其“处理”面板显示不正确:

Japanese

具体来说,“渐变”滑块控件的显示高度为 51 像素,而当语言设置为英语时,它们只有 46 像素高:

English Gradient control

有谁知道是什么原因导致的?

对话框定义如下:

IDD_RGB DIALOGEX 0, 0, 164, 126
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION
CAPTION "RGB/K Levels"
FONT 8, "MS Shell Dlg 2", 0, 0, 0x1
BEGIN
    CONTROL         "Gradient",IDC_REDGRADIENT,"MFCGradientCtrl",WS_TABSTOP,16,3,148,30,WS_EX_CLIENTEDGE
    CONTROL         "Gradient",IDC_GREENGRADIENT,"MFCGradientCtrl",WS_TABSTOP,16,35,148,30,WS_EX_CLIENTEDGE
    CONTROL         "Gradient",IDC_BLUEGRADIENT,"MFCGradientCtrl",WS_TABSTOP,16,67,148,30,WS_EX_CLIENTEDGE
    PUSHBUTTON      "Reset",IDC_RESET,116,112,48,14
    PUSHBUTTON      "Apply",IDC_PROCESS,0,112,48,14
    CONTROL         "Linked settings",IDC_LINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,100,63,10
    PUSHBUTTON      "",IDC_UNDO,57,112,16,12
    PUSHBUTTON      "",IDC_REDO,95,112,16,12
    PUSHBUTTON      "",IDC_SETTINGS,76,112,16,12
    PUSHBUTTON      "",IDC_RED_HAT,2,5,14,27
    PUSHBUTTON      "",IDC_GREEN_HAT,2,37,14,27
    PUSHBUTTON      "",IDC_BLUE_HAT,2,69,14,27
END

大卫

MFC CJK公司

评论

0赞 IInspectable 11/4/2023
可能对 DLU 计算使用错误/意外的字体回退(请参阅DS_SHELLFONT属性表页有哪些其他影响?
0赞 Andrew Truckle 11/4/2023
我的所有对话框都设置为使用 .FONT 8, "MS Shell Dlg", 0, 0, 0x0
0赞 IInspectable 11/5/2023
只是为了验证字体(和 DLU 计算)是否确实是问题的一部分,让程序在任一设置中调用 MapDialogRect 并输出结果。如果它们不同,则问题可能与对话框的字体有关。
1赞 David Partridge 11/6/2023
中文(简体) : { 0 , 0 , 100 , 100 } 之前的直立 { 0 , 0 , 200 , 200 } 之后的直立 } 日语: { 0 , 0 , 100 , 100 } 之后的直立 { 0 , 0 , 200 , 250 } 之后的直立 我看到一把冒烟的枪!
1赞 IInspectable 11/7/2023
这确实令人费解。人们会天真地假设(或任何其他字体,就此而言)无论环境系统设置如何都是相同的。我没有这个谜语的答案,只是一个关于如何更深入的想法:向对话框发送一条WM_GETFONT消息,并检查后续调用 GetObject 返回的 LOGFONT"Tahoma"

答:

0赞 David Partridge 11/9/2023 #1

我通过创建一个专门用于日语的资源文件来解决此问题,该文件是从英语资源文件复制而来的,然后编辑了被剪裁的控件的对话框定义,以便不再发生剪裁(我将大多数控件的高度降低了 1.25 倍,并根据需要将它们向上移动)。

大卫