在网上看到对MessageBoxIndirect的介绍,自己试了试,可以正常运行但无论如何也显示不了图标代码比较简单,就是显示一个带图标的消息框:#include "stdafx.h"int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
char szCaption[] = "MsgBox with an icon"; 
char szText[] = "Who stole my icon?";
MSGBOXPARAMS msgbox;
msgbox.cbSize = sizeof(MSGBOXPARAMS);
msgbox.dwContextHelpId = 0;
//msgbox.dwLanguageId = LANG_CHINESE; //msgbox.dwLanguageId 可以不用设置
msgbox.dwStyle = MB_USERICON;
msgbox.hInstance = hInstance;
msgbox.hwndOwner = NULL;
msgbox.lpfnMsgBoxCallback = NULL;
msgbox.lpszCaption = szCaption;
msgbox.lpszIcon = "1.ico";
msgbox.lpszText = szText;
::MessageBoxIndirect(&msgbox); return 0;
}1.ico 我已加到程序的资源中,msdn中关于lpszCaption的解释为"Identifies an icon resource. This parameter can be either a null-terminated string or an integer resource identifier passed to the MAKEINTRESOURCE macro. "
还特别说到如果想额外制定显示的图标,dwStyle需设置为MB_USERICON,我都照办了,不知道为什么还是无法显示图标,请教各位了。
运行效果是在图标的位置处是空白的......

解决方案 »

  1.   

    你应该在RC中生成一个ICON。例如定义为ID_ICON1
    msgbox.lpszCaption = MAKEINTRESOURCE(ID_ICON1); 
      

  2.   

    谢谢sys0004的回答您的意思是不是msgbox.lpszIcon = MAKEINTRESOURCE(ID_ICON1); 其实我最开始就是这么实现的——先插入一个图标资源(引入了1.ico这个图标),资源ID为IDI_ICON1然后就像您说的 msgbox.lpszIcon = MAKEINTRESOURCE(IDI_ICON1); 但是编译时总是提示 error C2065: 'IDI_ICON1' : undeclared identifier后来才直接用文件名的。请问为什么会出现那样的问题?
      

  3.   

    哈哈,真是不好意思,没想到竟然犯了这么低级的错误。sys0004 谢谢您了~~~