C++ Win32求解MessageBox消息对话框没法显示出来,但可以enter来控制 Posted 2023-04-06
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Win32求解MessageBox消息对话框没法显示出来,但可以enter来控制相关的知识,希望对你有一定的参考价值。
运行后的窗口可以正常显示出来,我设置了一个点击关闭窗口后弹出一个MessageBox消息对话框来确认是否关闭窗口,但是这个MessageBox不能正常显示; 点击关闭按钮后原来的窗口变成锁定状态,不能操作,但是可以通过enter键来操作MessageBox对话框确认关闭窗口!现象就好像是MessageBox对话框功能出来了,就是看不到框而已! 请问各位大神,怎样才能令这个MessageBox对话框正常显示。 #include <windows.h> LRESULT CALLBACK win( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) WNDCLASS wc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_WINLOGO); wc.hInstance = hInstance; wc.lpfnWndProc = win; wc.lpszClassName = "first"; wc.lpszMenuName = NULL; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); HWND hwnd; hwnd = CreateWindow("first","第一个窗口",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); MSG msg; while(GetMessage(&msg,NULL,0,0)) TranslateMessage(&msg); DispatchMessage(&msg); return 0; LRESULT CALLBACK win( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) switch(uMsg) case WM_CHAR: break; case WM_LBUTTONDOWN: break; case WM_PAINT: break; case WM_CLOSE: if(IDYES==MessageBox(hwnd,"是否结束?","提醒!",MB_YESNO)) DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); return 0;
如果你不删除这个 case WM_PAINT: break; 会导致系统未正确重绘窗口,而把MessageBox窗口覆盖。所以MessageBox已经出来了,但是显示不正常。
参考技术A
MessageBox();中的窗口句柄要为空追问 试过了,还是不行~
追答 case WM_CHAR: break; case WM_LBUTTONDOWN: break; case WM_PAINT: break; 这些你都没有自己添加的消息响应,可以不写
追问 如果不去掉呢?就会有BUG吗?为什么?
追答 写了会执行你写的,没写会执行系统默认的
参考技术B
把WM_PAINT消息的空处理拿掉。追问 是不是WM_PAINT消息一定要有消息??
追答 case WM_PAINT: break; 我的意思是把这两行删掉。
追问 我知道你叫我将那两行去掉,我的问题是如果不去掉的话呢?一定要在里面做出消息响应的操作吗?不作出操作就会有错误吗?
Python基于tkinter.messagebox实现简易消息框对话框
库导入:
import tkinter
import tkinter.messagebox
有关提示框:
tkinter.messagebox.showinfo(title=None, message=None)
tkinter.messagebox.showwarning(title=None, message=None)
tkinter.messagebox.showerror(title=None, message=None)
其中涉及到对话框如下:
tkinter.messagebox.askquestion(title=None, message=None)
tkinter.messagebox.askokcancel(title=None, message=None)
tkinter.messagebox.askyesno(title=None, message=None)
tkinter.messagebox.askretrycancel(title=None, message=None)
tkinter.messagebox.askyesnocancel(title=None, message=None) # 其中 askyesnocancel有三个按钮
以askyesno为例,简单调用试试:
mes=tkinter.messagebox.askyesno(\'提示\', \'要执行此操作吗\')
理论上两个按钮,点击“是(Y)”返回True,点击“否(N)”返回Fasle;实际调用对话功能没啥问题,然而出现了如下所示框分离……
后来查了下,得想办法把主体框隐藏掉,所以简单如下处理了下,对话框如下所示,看着也顺眼多了。其它提示框、对话框用法相同。
def message_askokcancel(title, info):
top = tkinter.Tk()
top.withdraw()
top.update()
mes = tkinter.messagebox.askokcancel(title, info)
top.destroy()
return mes
mes = message_askokcancel("提示","要执行此操作?")
if mes:
print("已执行\\n")
结果:
以上是关于C++ Win32求解MessageBox消息对话框没法显示出来,但可以enter来控制的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Win32 API 的对话框中显示自定义消息?
怎样用win32 API函数弹出对话框
python 弹窗提示和警告框MessageBox部件
Win32 消息处理程序错误传播
Winform与WPF对话框(MessageBox, Dialog)之比较
为自定义 Win32 模式对话框模仿 ::DialogBox()