如何让Messagebox对话框标题栏上显示图标? ( 积分: 20 )

  • 主题发起人 主题发起人 halqj
  • 开始时间 开始时间
H

halqj

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让Messagebox对话框标题栏上显示图标?
 
同一个问题,帅哥一下开两个贴,刁啊,
你在那儿回答过了
 
帮助,看帮助才是最清楚的. Help->Windows SDK -> 在索引页输入 MessageBox
if IDNo= MessageBox(Handle,'Text','Caption',MB_YESNoCancel + MB_ICONQUESTION + MB_DEFBUTTON2) then
...
 
我也想知道,好多用VC写的软件都可以在MessageBox的“标题栏”中加入icon,甚至是OpenDialog之类的。
比如千千静听,winamp
 
不能结题,没有给出准确答案
 
function TApplication.MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;

下面是图标参数:
MB_ICONHAND = $00000010;
{$EXTERNALSYM MB_ICONQUESTION}
MB_ICONQUESTION = $00000020;
{$EXTERNALSYM MB_ICONEXCLAMATION}
MB_ICONEXCLAMATION = $00000030;
{$EXTERNALSYM MB_ICONASTERISK}
MB_ICONASTERISK = $00000040;
{$EXTERNALSYM MB_USERICON}
MB_USERICON = $00000080;
{$EXTERNALSYM MB_ICONWARNING}
MB_ICONWARNING = MB_ICONEXCLAMATION;
{$EXTERNALSYM MB_ICONERROR}
MB_ICONERROR = MB_ICONHAND;
{$EXTERNALSYM MB_ICONINFORMATION}
MB_ICONINFORMATION = MB_ICONASTERISK;
{$EXTERNALSYM MB_ICONSTOP}
MB_ICONSTOP = MB_ICONHAND;

例:
Application.MessageBox('内容','标题',MB_ICONASTERISK + MB_YesNo);
 
楼主看看,是不是这个意思?

点我
 
是这个意思,但我要的是Messagebox来显示,而不是窗体来显示
 
楼主啊,你没有仔细看,我这个就是标准的MessageBox,你可以用Spy++查一查它。
用钩子做的,不仅是MessageBox,其他的如OpenDialog FontDialog都可以用这个方法加入“标题栏”Icon,而且Icon可以随意设定。

楼主可以看看我做的这个,不仅符合你的要求,还可以修改MessageBox的其他属性:
请再点我
 
代码:
贴出主要代码吧

全局变量:
[b]var[/b]
  hMsgBox: HHOOK;

[b]function[/b] HMSGBOXProc(Msg, wParam, lParam: Integer): Integer; [b]stdcall[/b];
[b]var[/b]
  hWindow: HWND;
  hMainIcon: HICON;
[b]begin[/b]
  [b]if[/b] Msg < 0 [b]then[/b]
    Result := CallNextHookEx(hMsgBox, Msg, wParam, lParam);
  [b]if[/b] Msg = HCBT_ACTIVATE [b]then[/b]
  [b]begin[/b]
    hWindow := HWND(wParam);
    hMainIcon := LoadIcon(Sysinit.HInstance, 'MAINICON');  //需要什么图标在这里改,默认是程序图标
    SendMessage(hWindow, WM_SETICON, ICON_SMALL, hMainIcon);
    Result := 0;
  [b]end[/b];
  Result := CallNextHookEx(hMsgBox, Msg, wParam, lParam);
[b]end[/b];

//MsgBoxEx替代了MessageBox
[b]function[/b] MsgBoxEx(AHWND: HWND; AText, ACaption: [b]String[/b];
  AStyle: LongWord): Cardinal;
[b]var[/b]
  ret: Integer;
[b]begin[/b]
  hMsgBox := SetWindowsHookEx(WH_CBT, @HMSGBOXProc, GetModuleHandle([b]nil[/b]), 0);
  ret := MessageBox(AHWND, PChar(AText), PChar(ACaption), AStyle);
  UnhookWindowsHookEx(hMsgBox);
  Result := ret;
[b]end[/b];


执行:
MsgBoxEx(Handle, 'This is a MessageBox', 'Title', MB_ICONQUESTION [b]or[/b] MB_YESNOCANCEL);
 
使用MessageBox的替代函数MessageBoxIndirect,可以自定义图标。
 
接受答案了.
 

Similar threads

后退
顶部