MFC 弹出窗口MessageBox的使用

本文详细介绍了VC中的标准对话框函数MessageBox的使用方法,包括其参数解释、样式定义及返回值说明,并通过实例展示了如何创建带有特定样式的对话框。
部署运行你感兴趣的模型镜像
MessageBox这个函数可以在VC里面显示一个标准对话框。

函数原型:
int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT, uType);
参 数含义:
HWND hWnd —— 父窗口的句柄。(在使用的时候发现在CView类里面不要填这一项,但是如果是再其他的类中,就要填写)
LPCTSTR lpText —— 对话框的内容
LPCTSTR lpCaption —— 对话框的标题
UINT uType ——窗口的风格
风 格:
MB_DEFBUTTON1 —— 缺省按钮为第一个按钮
MB_DEFBUTTON2 —— 缺省按钮为第二个按钮
MB_DEFBUTTON3 —— 缺省按钮为第三个按钮
MB_ICONEXCLAMATION —— 显示图标为惊叹号
MB_ICONQUESTION —— 显示图标为问号
MB_ICONSTOP —— 显示图标为红叉叉
MB_ABORTRETRYIGNORE —— 显示终止、重试、忽略按钮
MB_OK —— 只显示确定按钮
MB_OKCANCEL —— 显示确定和取消按钮
MB_RETRYCANCEL —— 显示重试和取消按钮
同时应用多个风格的时候用|连接。
返回值:
IDABORT —— 按下了终止按钮
IDRETRY —— 按下了重试按钮
IDIGNORE —— 按下了忽略按钮
IDOK —— 按下了确定按钮
IDCANSEL —— 按下了取消按钮
IDYES —— 按下了是按钮
IDNO —— 按下了否按钮

    比如要显示一个带有红叉图标的按钮为终止、重试、忽略,并且默认按钮为重试,标题为“我顶”,内容为“我顶你个肺”的对话框,并且还要求如果单击了终止,则给a赋值为1,那么语句则为:
if(MessageBox("你好吗", "你好", MB_ABORTRETRYIGNORE |  MB_DEFBUTTON2 | MB_ICONSTOP) == IDABORT) {
a = 1;
}


语法:MessageBox(NULL, "提示信息", "标题", 属性) 按钮属性 值 定义 说明 0 MB_OK “确定” 1 MB_OKCANCEL “确定”和“取消” 2 MB_ABORTRETRYIGNORE “终止”、“重试”、“忽略” 3 MB_YESNOCANCEL “是”、“否”和“取消” 4 MB_YESNO “是”和“否 5 MB_RET ...

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 在MFC中修改MessageBox弹出位置 在MFC中,`MessageBox` 是一个常用的函数,用于显示消息框。然而,默认情况下,`MessageBox` 的位置是由系统自动决定的。如果需要改变 `MessageBox` 的弹出位置,则可以通过以下方法实现。 #### 方法一:使用化技术调整 `MessageBox` 位置 通过子化技术捕获 `MessageBox` 窗口句柄,并在其创建后调整其位置[^4]。具体步骤如下: 1. 调用 `MessageBox` 函数以显示消息框。 2. 使用 `FindWindow` 查找消息框的窗口句柄。 3. 调用 `SetWindowPos` 或 `MoveWindow` 函数设置消息框的新位置。 以下是实现代码示例: ```cpp void ShowCustomPositionMessageBox(CWnd* pParent, LPCTSTR lpszMessage, LPCTSTR lpszCaption) { // 显示标准 MessageBox HWND hMsgBox = ::MessageBox((HWND)pParent->GetSafeHwnd(), lpszMessage, lpszCaption, MB_OK); // 查找 MessageBox 窗口句柄 CWnd* pMsgBoxWnd = CWnd::FromHandle(::FindWindow(NULL, lpszCaption)); if (pMsgBoxWnd != nullptr) { // 获取当前窗口的位置大小 CRect rect; pMsgBoxWnd->GetWindowRect(&rect); // 设置新位置 pMsgBoxWnd->MoveWindow(100, 100, rect.Width(), rect.Height()); } } ``` 此方法利用了 `FindWindow` `MoveWindow` 函数来动态调整 `MessageBox` 的位置。 #### 方法二:使用自定义对话框替代标准 `MessageBox` 如果需要更灵活的控制,可以创建一个自定义对话框来替代标准的 `MessageBox`。自定义对话框允许完全控制窗口的位置、大小以及行为[^2]。 以下是实现自定义对话框的一个示例代码: ```cpp // 自定义对话框头文件 class CCustomMessageBox : public CDialogEx { public: CCustomMessageBox(CWnd* pParent = nullptr); // 标准构造函数 protected: afx_msg void OnNcHitTest(CPoint point); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnMouseMove(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP() private: CPoint m_DragStart; bool m_bDragging; }; // 自定义对话框实现文件 BEGIN_MESSAGE_MAP(CCustomMessageBox, CDialogEx) ON_WM_NCHITTEST() ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() END_MESSAGE_MAP() CCustomMessageBox::CCustomMessageBox(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_CUSTOM_MESSAGE_BOX, pParent), m_bDragging(false) { } afx_msg LRESULT CCustomMessageBox::OnNcHitTest(CPoint point) { CRect rect; GetWindowRect(&rect); if (point.y < rect.top + 20) // 检测标题栏区域 return HTCAPTION; return CDialogEx::OnNcHitTest(point); } void CCustomMessageBox::OnLButtonDown(UINT nFlags, CPoint point) { m_DragStart = point; m_bDragging = true; CDialogEx::OnLButtonDown(nFlags, point); } void CCustomMessageBox::OnMouseMove(UINT nFlags, CPoint point) { if (m_bDragging) { CPoint currentPos; GetCursorPos(&currentPos); CPoint offset = currentPos - m_DragStart; SetWindowPos(nullptr, offset.x, offset.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER); m_DragStart = currentPos; } CDialogEx::OnMouseMove(nFlags, point); } ``` 通过上述代码,可以创建一个支持拖动自定义位置的对话框,从而替代标准的 `MessageBox`。 #### 注意事项 - 如果需要频繁调整 `MessageBox` 的位置,建议使用自定义对话框替代标准 `MessageBox`[^2]。 - 在多线程环境中操作窗口时,确保线程安全以避免潜在问题。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值