再说一次: 与其要实现这个功能...你还不如自己创建一个普通对话框... 当然...如果你是基于学习的目的来做这个程序的话..你可以这么做!给你一个思路...利用钩子把MessageBox的消息拦截下来并进行处理... 具体可参考相关的资料...我建义是去jjhou.csdn.net上把Win95 程式设计指南-- Windows 95 A Developer's Guide下载下来...然后慢慢看...绝对是学习windows程序设计的好书..http://jjhou.csdn.net/free-win95adg.htm
SetWindowPos MoveWindow
不是的話.可用FindWindow..然後掉用上面倆個
难道我又理解错了??
但是我想你也可以自己建立一个提示对话框啊。这样就可以使用SetWindowPos和MoveWindow函数随意控制了。
如果你是自定义的对话框,就可以用上述MoveWindow等来处理。
如果你的对话框是一个基于对话框的应用程序,你想改变其初始位置,就可以重载消息:WM_WINDOWPOSCHANGING,然后再修改初始位置。
与其要实现这个功能...你还不如自己创建一个普通对话框...
当然...如果你是基于学习的目的来做这个程序的话..你可以这么做!给你一个思路...利用钩子把MessageBox的消息拦截下来并进行处理...
具体可参考相关的资料...我建义是去jjhou.csdn.net上把Win95 程式设计指南-- Windows 95 A Developer's Guide下载下来...然后慢慢看...绝对是学习windows程序设计的好书..http://jjhou.csdn.net/free-win95adg.htm
这就是你的不对了! 为什么无缘无故要骂人! 别个 kingcom_xu(←对!它就是被封杀的kingcom!) 是好心帮你, 你说话有点过火了哦!要是谁都和你一样, 谁还会在这里无偿帮助别人了呢! 对不? 呵呵! 希望大家还是和睦相处嘛! :)
{
TForm::WndProc(Message); //失去焦点之前
if(Message.Msg == WM_NCACTIVATE)
{
}
//失去焦点之后
else if(Message.Msg == WM_ACTIVATE)
{
if(LOWORD(Message.WParam) == WA_INACTIVE)
{
HWND hWnd;
char ClassBuf[64]; hWnd = (HWND)Message.LParam;
GetClassName(hWnd,ClassBuf,sizeof(ClassBuf)); //首先判断是否是MessageBox对话框,
if(AnsiString(ClassBuf) == "#32770")
{
//再判断这个窗口是否是本身程序的窗口(因为别的程序弹出窗口时,你的主窗口也同样失去焦点)
DWORD dwProcessID;
GetWindowThreadProcessId(hWnd,&dwProcessID);
if(dwProcessID == GetCurrentProcessId())
{
//移动窗口的位置
MoveWindow(.......);//或者调用 SetWindowPos(...)
//替换左边的标题栏图标(如果有的话)
SetClassLong(hWnd,GCL_HICON,(long)Image1->Picture->Icon->Handle); //重新设置按钮的文本(比如把确定改为“OK 007”)
HWND hTemp; hTemp = GetDlgItem(hWnd,1);
SetWindowText(hTemp,"New Text For Button"); //.........其他操作
}
}
}
}
}
//---------------------------------------------------------------------------============另:楼主的火气太大了。
Messagebox不是也有窗口句柄吗?
用那个什么FromActiveWindow来得到MessageBox的HWND,然后SetWindowPos或者MoveWindow随便你了何必弄得那么复杂?
fromActiveWindow在哪里调用???不可能!
在MessageBox之前先用一个定时器
kingcom_xu(←对!它就是被封杀的kingcom!) ;
在MessageBox之前先用一个定时器
========我第一次回答这个问题的时候,给出的代码就是使用定时器,后来继续研究,发现现在的方法更好一些。当然,个人爱好不同,使用哪一种方法都可以。