模拟windows消息框,实现如下功能需求:
1.以函数的形式调用,封装到dll库中
2.字符串长度自适应
3.目前分为确认窗口和选择窗口
4.字体可选择
5.关闭按钮,确认按钮位置自适应
6.任务栏和任务管理器不显示窗口名称
7.标题栏精确拖动
看上去比较简单,实际上还是有些难点。消息窗口,跟随主窗口隐藏,并始终在主窗口上面。
1.以函数的形式调用,封装到dll库中
2.字符串长度自适应
3.目前分为确认窗口和选择窗口
4.字体可选择
5.关闭按钮,确认按钮位置自适应
6.任务栏和任务管理器不显示窗口名称
7.标题栏精确拖动
看上去比较简单,实际上还是有些难点。消息窗口,跟随主窗口隐藏,并始终在主窗口上面。
//.h处理父窗口过程
TWndMethod OldPanelProc;
void __fastcall WindowProc(TMessage &message);
//.cpp中
void __fastcall TForm2::WindowProc(TMessage &message)
{
OldPanelProc(message); //执行默认动作
if(message.Msg == WM_SETFOCUS)
{
this->BringToFront();
}
}
//dll中MsgBoxYesNo函数中:
f->OldPanelProc = t->WindowProc;
t->WindowProc = f->WindowProc;
f->ShowModal();
t->WindowProc = f->OldPanelProc ;
调用DLL函数,如下:
extern "C" __declspec(dllimport) void __stdcall MsgBox(TForm * t,char *s1,char *s2,int);
extern "C" __declspec(dllimport) int __stdcall MsgBoxYesNo(TForm *t,char *s1,char *s2,int);
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MsgBox(Form1,"您好,这个选项不能为空,请重新填写,\n大家好!","提示",0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int re = MsgBoxYesNo(Form1,"这是模拟windows消息框","提示",0);
if(re == 1)
{
MsgBox(Form1,"您点击的是'是'按钮","提示",0);
}
if(re == 2)
{
MsgBox(Form1,"您点击的是'否'按钮","提示",0);
}
}