Win 32 API 自定义窗口代替messagebox显示
记录一下第一次做项目(研究生)的一个小小需求。如果大家有更好的方法希望大家在评论区留言哦。
需求就是自定义一个窗口代替messagebox,因为messagebox显示有限,所以有这个需求。由于第一次接触这个,在网上找了很多的资料,发现用API做的很少,过程很是心酸,不过也算是苦尽甘来吧,成功还是很开心的。
废话少说直接上代码,新建一个窗口,没有什么特别的
HWND hMsgWindow = CreateWindow(TEXT("RULEJUDGE_WINDOW"), lpCaption, WS_OVERLAPPEDWINDOW , CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, GetMyModuleHandle(), NULL);
ShowWindow(hMsgWindow, SW_NORMAL);
UpdateWindow(hMsgWindow);
为什么会选择用控件呢,因为我要显示的文本是通过调用的,由于水平有限,不知道如何把调用参数传递给窗口回调函数里。
如果不在窗口回调函数中的VM_PAINT中显示,那么只要窗口边框调整,窗口内的东西就会重画,另外控件也有很多好处(暂时还没有发现)。
其次这是一个edit控件,而我只需要它显示,所以风格设定了只读。调用显示的内容格式是LPCTSTR,而SetWindowText函数是LPCSTR,所用需要转换,用了CString函数,而这个函数的头文件可以用
#include <atlstr.h>//LPCSTR与LPCTSTR转换
//edit control
hWinRich = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("RichEdit20A"), NULL, ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_READONLY,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hMsgWindow, NULL, NULL, NULL);
GetClientRect