有关MessageBox,但即使是“高手”也未必能行(300分)

  • 主题发起人 主题发起人 Crane
  • 开始时间 开始时间
for 2000、NT: &nbsp;<br>MessageBox(Handle,'看到右边哪个图标了?'关于本程序',MB_OK+MB_ICONEXCLAMATION+MB_RTLREADING);
 
@_@看到了,右边的大图标确实有看到,可左边的嘛.....<br>老张,我对你幽默感的敬佩之情.....................不可收拾。<br>[:D][:D]<br>不过那个参数我还是头一回看人用,不错不错,绝对要加分的。
 
左边哪个关闭按钮上的 &nbsp;X也是个图标,你不信可以看shell32,dll,是里面的资源文件
 
MessageBox的图标在user32.dll里面
 
&gt;&gt;@_@看到了,右边的大图标确实有看到,可左边的嘛.....<br>&gt;&gt;老张,我对你幽默感的敬佩之情.....................不可收拾。<br>&gt;&gt;不过那个参数我还是头一回看人用,不错不错,绝对要加分的。<br>不会吧,这也是头一回看人用,你难道就不用API函数了?偶是菜鸟中的菜鸟也都看过,帮助里很详细的阿
 
李逍遥_神仙居:是啊我可真是头一回看人翻着用对话框。难道你一直这么用?[:D]<br>想想用户发现一个报错的对话框是反着的,得多惊呀啊,肯定觉得问题大了。<br>今天下班之前公布我的方法,不过还是想再等等。我想这题即使没有好方法,用大<br>家现有的知识也能搞定了。
 
在本进程中用hook:<br>hHook1 = SetWindowsHookEx(WH_CALLWNDPROC , (HOOKPROC)HookProc, NULL, GetCurrentThreadId());<br>MessageBox....<br>UnhookWindowsHookEx(hHook1);<br><br><br>LRESULT CALLBACK &nbsp; HookProc(UINT code , WPARAM wParam, LPARAM lParam)<br>{<br>&nbsp; &nbsp;CWPSTRUCT &nbsp;*msg = (CWPSTRUCT *)lParam;<br>&nbsp; &nbsp;if ( msg &amp;&amp; msg-&gt;hwnd)// &amp;&amp; msg-&gt;wParam == HCBT_CREATEWND)<br>&nbsp; &nbsp;{<br> char strout[1024]="";<br>&nbsp; &nbsp; char winname[256]="";<br>&nbsp; &nbsp; <br> ::GetWindowText(msg-&gt;hwnd,winname,256);<br> if(msg-&gt;message == WM_INITDIALOG)<br> {<br> HICON testicon= AfxGetApp()-&gt;LoadIcon(IDR_MAINFRAME);<br> CWnd *mymes;<br> mymes = CWnd::FromHandle(msg-&gt;hwnd);<br> mymes-&gt;SetIcon(testicon,FALSE);<br> mymes-&gt;SetIcon(testicon,TRUE);<br> mymes-&gt;ModifyStyle(NULL,WS_SYSMENU);<br> mymes-&gt;GetWindowText(winname,256);<br> if (mymes-&gt;IsIconic)<br> {<br> CPaintDC dc(mymes); // 描画用のデバイス コンテキスト<br><br> mymes-&gt;SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);<br><br> // クライアントの矩形領域内の中央<br> int cxIcon = GetSystemMetrics(SM_CXICON);<br> int cyIcon = GetSystemMetrics(SM_CYICON);<br> CRect rect;<br> mymes-&gt;GetClientRect(&amp;rect);<br> int x = (rect.Width() - cxIcon + 1) / 2;<br> int y = (rect.Height() - cyIcon + 1) / 2;<br><br> // アイコンを描画します。<br> dc.DrawIcon(x, y, testicon);<br> }//*/<br> //////////////////////////////////////////////////////////<br> }<br>&nbsp; &nbsp; return CallNextHookEx(hHook1, code, &nbsp;wParam, lParam);<br>&nbsp; &nbsp;} <br>}<br>
 
不用Hook,直接用Findwindows也可以的,我试过的,但是我无法捕获重画事件
 
找到句柄,用GetDC,也可以的
 
呵呵,老张,问题就是咱们不知道messagebox什么时候会弹出来,没法找它。[:D]
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部