void _MessageBox()
{
ResultMB = MessageBox(NULL, TEXT("MB!"), TEXT("Message"), MB_OK);
if (ResultMB == IDOK)
{
for (int q = 1; q < 5; q++)
{
ResultMB = MessageBox(NULL, TEXT("hi"), TEXT("Message"), MB_OK);
}
}
}
我想使每个MessageBox都在屏幕上的其他位置 但是我不知道如何使用C ++更改位置
答案 0 :(得分:2)
MessageBox()
不允许您为其对话框窗口指定位置。
但是,您可以手动操作对话框窗口。首先,在调用MessageBox()
之前,先通过SetWindowsHookEx()
或SetWinEventHook()
安装线程本地挂钩。该钩子使您可以在创建对话框窗口时对其进行访问。然后,您可以使用对话框窗口执行任何操作,例如将其放置在您希望其出现的位置。
例如:
// Using SetWindowsHookEx() ...
__thread int MsgBox_X;
__thread int MsgBox_Y;
static LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HCBT_CREATEWND)
{
CBT_CREATEWND *s = (CBT_CREATEWND*) lParam;
s->lpcs->x = MsgBox_X;
s->lpcs->y = MsgBox_Y;
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int MessageBoxPos(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType, int X, int Y)
{
HHOOK hHook = SetWindowsHookEx(WH_CBT, &CBTProc, NULL, GetCurrentThreadId());
MsgBox_X = X;
MsgBox_Y = Y;
int result = MessageBox(hWnd, lpText, lpCaption, uType);
if (hHook) UnhookWindowsHookEx(hHook);
return result;
}
// Using SetWinEventHook() ...
__thread int MsgBox_X;
__thread int MsgBox_Y;
static void CALLBACK WinEventProc(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
SetWindowPos(hwnd, NULL, MsgBox_X, MsgBox_Y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}
int MessageBoxPos(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType, int X, int Y)
{
HWINEVENTHOOK hHook = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_CREATE, NULL, &WinEventProc, GetCurrentProcessId(), GetCurrentThreadId(), WINEVENT_INCONTEXT);
MsgBox_X = X;
MsgBox_Y = Y;
int result = MessageBox(hWnd, lpText, lpCaption, uType);
if (hHook) UnhookWinEvent(hHook);
return result;
}
无论哪种方式,您都可以根据需要呼叫MessageBoxPos()
:
void _MessageBox()
{
ResultMB = MessageBoxPos(NULL, TEXT("MB!"), TEXT("Message"), MB_OK, DesiredX, DesiredY);
if (ResultMB == IDOK)
{
for (int q = 1; q < 5; q++)
{
ResultMB = MessageBoxPos(NULL, TEXT("hi"), TEXT("Message"), MB_OK, DesiredX, DesiredY);
}
}
}
答案 1 :(得分:0)
我认为我们无法更改MessageBox的位置。没有原型请求位置的int值,MessageBox的返回值是int值,这是您按下的按钮的ID。
所以这不可能。
但是我可以提出一些建议。
创建一个新窗口,并为其指定一个句柄,例如HWND。
然后使用SetWindowPos函数更改Windows位置:
SetWindowPos(hwnd,NULL,PositionX,PositionY,SizeX,SizeY,SWP_SHOWWINDOW);
,对于The Beep,您可以使用MessageBeep()函数。它适用于MessageBox的ICON主题:
MessageBeep(MB_OK);
或
MessageBeep(MB_ICONINFORMATION);
或者也是
MessageBeep(MB_ICONERROR);
就是这样,谢谢您的阅读!