- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对于我的应用程序,我需要在不使用资源的情况下创建一个对话框。我正在尝试使用 DialogBoxInderect 函数来做到这一点。该代码丑陋得令人难以置信,但我以某种方式成功地做到了。
问题是由于某种原因,对话框比我要求的字体大得多。
如果我从资源加载对话框,下面是对话框的样子:
这里是调用 DialogBoxInderect 函数时显示的相同大小的对话框。
这是它在代码中的定义:
HGLOBAL hGlobal;
LPDLGTEMPLATE wlsDialogTemplate;
LPDLGITEMTEMPLATE wlsDialogItemTemplate;
LPWORD nextItem;
LPWSTR itemString;
int32_t itemStringLength;
// Check for memory allocation errors
hGlobal = GlobalAlloc(GMEM_ZEROINIT, 1024);
if (!hGlobal)
return -1;
wlsDialogTemplate = (LPDLGTEMPLATE)GlobalLock(hGlobal);
// Define a dialog box.
wlsDialogTemplate->style = WS_CAPTION;
wlsDialogTemplate->x = 0;
wlsDialogTemplate->y = 0;
wlsDialogTemplate->cx = 320;
wlsDialogTemplate->cy = 115;
GlobalUnlock(hGlobal);
retCode = DialogBoxIndirect(0, (LPDLGTEMPLATE)hGlobal, 0, ActivateWlsMsgDialog);
这是它在 RC 文件中的定义方式:
IDD_WLS_SMALL_MESSAGE_DLG DIALOGEX 0, 0, 320, 115
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",ID_CUSTOM_OK,175,95,120,15
PUSHBUTTON "Cancel",ID_CUSTOM_CANCEL,45,95,120,15
CTEXT "Static",IDC_HEADER_TEXT,120,10,170,70
CONTROL "",IDC_LOGO,"Static",SS_BITMAP,16,10,83,70
END
如您所见,第二个对话框比定义的要大得多。我尝试使用各种样式标志但没有成功(这就是为什么在较大的对话框上有红叉)。
有什么帮助吗?谢谢!
最佳答案
较大的尺寸很容易解释。 Windows 会根据其字体自动调整对话框的大小,较大的对话框使用不同的字体。事实上,它使用的是默认系统字体(有关 Windows 对话框字体令人困惑的问题的更多信息,请参见我的回答 here)。
所以真正需要关注的问题是为什么它使用不同的字体,并修复它可以解决大小问题。
在对话框资源文件中,您指定DS_SETFONT
flag作为对话框样式之一。根据文档,这个标志
[i]ndicates that the header of the dialog box template (either standard or extended) contains additional data specifying the font to use for text in the client area and controls of the dialog box. If possible, the system selects a font according to the specified font data. The system passes a handle to the font to the dialog box and to each control by sending them the
WM_SETFONT
message.
这就解释了为什么那个显示的是预期的字体。
下一个合乎逻辑的问题是动态创建的对话框模板有何不同,用 DialogBoxIndirect
函数显示。罪魁祸首再次是 DS_SETFONT
标志,但在这种情况下,该标志不存在。这意味着该对话框不包含任何有关使用哪种字体来显示其控件的信息,并且系统默认使用默认系统字体(这是您在第二个屏幕截图中看到的丑陋的 Windows 2.0 时代字体)。
一旦我们理解了这一点,解决方案就很明显了:您需要告诉对话框您希望它使用哪种字体。我想到了两种可能的方法:
DS_SETFONT
标志并在对话框模板的标题中提供字体信息,如上述链接文档中所述。WM_INITDIALOG
消息。 后者可能是您真正想要做的,因为它允许您使用实际 系统字体(令人困惑的是,它与我一直称呼的不同)默认" 系统字体),它是 Windows Vista 和更高版本中的 Segoe UI。请注意,即使在您的第一个屏幕截图中,它也使用 MS Sans Serif,因此在 Aero 界面中像拇指一样突出。再次参见 this answer了解比您想知道的更多关于字体的信息,以及完成这项工作的示例代码。您需要确保为对话框本身和它的所有子控件设置字体。
关于c++ - DialogBoxIndirect 创建的对话框比要求的大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9207414/
我有一个删除按钮,单击该按钮时我希望弹出一个对话框,然后单击“确定”它应该执行 Ajax 调用,否则不应该执行任何操作。这是代码 $('.comment-delete').click(function
public void exitGame() { //pop up dialogue Platform.exit(); } 我已经尝试了很多我在互联网上看到的不同的东西,但我什么都做不了。我所
我有一个典型的素面对话框,效果很好,但是当有人在对话框外单击时,我找不到任何关闭它的选项。我看到了一些jquery示例,我想我可以将其改编为primefaces对话框,但首先要确保还没有解决方案? 谢
我试图让 jquery 对话框在单击按钮时启动,但似乎不起作用。任何帮助将不胜感激: $('#wrapper').dialog({ autoOpen: false,
我试图单独更改标题栏颜色。所以我使用了 .ui-dialog-titlebar ,但它不起作用,所以我尝试使用 ui-widght-header ,它也反射(reflect)到数据表..请告知。 //
我的页面上有 div(box),我正在使用此脚本将 div 显示为对话框。在该 div 内,我有一个超链接,单击该超链接时,我想淡出对话框并关闭。对话框的内容淡出,但对话框的边框保持不变。如果我将 $
我当前有一个对话框,其内容有两个输入(这两个输入使用 .datepicker())。当我打开对话框时,第一个输入成为焦点,并且第一个日期选择器自动出现。我尝试隐藏 div 并模糊输入,但这会导致日期选
我想即时创建一个 jQuery 对话框。我正在使用这个: var newDiv = $(document.createElement('div')); $(newDiv).html('hello th
child: RaisedButton( color: const Color(0xFF5867DD), onPressed: (){ updateProfilePic();
我有下面的 jquery 代码,我已根据我的要求对其进行了自定义,但存在一些问题。首先,用户单击“单击此处”,不会显示对话框。当用户单击“关闭”时,对话框不会消失。非常感谢您提供的所有帮助。
如何创建一个对话框,该对话框的顶部有一个文本,其下方有一个空白区域,用户可以在其中键入内容,在右侧下方有一个 OKAY 按钮,当您单击该按钮时,对话框消失? 像这样: 最佳答案 String inpu
这是一个简单得多的问题。 private static AplotBaseDialog dlg; public Object execute(final ExecutionEvent event) t
我正在为我的应用程序开发小部件。应该有一些小部件可以实现相同的功能,唯一的区别在于它们的布局(主题/外观) 我会创建一个对话框或屏幕,用户可以在其中选择他喜欢的小部件。当我选择它们时,我在很多小部件中
我有 jQuery 对话框窗口,在某些操作中我有一个加载的 blockUI 插件。 我面临的问题是,即使 AJAX 图像仍在显示,我仍然能够在执行 ajax 操作时执行操作。 另一方面,JSP 页面在
我非常熟悉将 jQuery 对话框 div 设置为可见后将其附加到表单元素的技巧。我已经在 .NET 中这样做了一百次左右,而且效果很好!然而,我正在尝试在 Coldfusion 网站上执行此操作,这
我想使用jquery对话框来收集用户信息(例如用户名)。我如何使用 Jquery 做到这一点并将数据收集到 Javascript 变量中? 这是我迄今为止的尝试: // Dialog here, ho
如何设置 jquery 对话框按钮的工具提示?请参阅下面的内容...这里没有 id 或样式类。 jQuery("#dialog-form").dialog ({ autoOpen: false,
我有调用对话框的 JS 函数 function SomeFunction { $('#editformdialog').dialog('open'); } 这显然已经简化了。但是,我得到 a is u
我正在使用 jquery 模式对话框来显示部分 View 中的数据表。在部分 View 中,我有一些脚本,用于将 HTML 表更改为 jquery DataTables。因此,我需要确保表格在对话框中
我正在尝试添加透明的 JQuery 对话框。但我遇到了两个问题: 文本“Hello”的背景不会变得透明 删除标题栏后,我无法再拖动对话框 这些评论是我迄今为止尝试过的。 //Create ne
我是一名优秀的程序员,十分优秀!