怎么把这段鼠标拖动改变无边框窗体的代码改成C+SDK,或者MFC啊!我搞了半天不成,晕死了!
在单元文件的.h文件中加入:
private: // User declarations
void __fastcall WndProc(TMessage &Msg);
在单元文件的.cpp文件中加入:
// 重载窗体的WndProc实现截获窗体消息
void __fastcall TForm1::WndProc(TMessage &Msg)
{
switch(Msg.Msg)
{
case WM_NCHITTEST: //
{
// 分解当前鼠标的坐标
int nPosX = LOWORD(Msg.LParam);
int nPosY = HIWORD(Msg.LParam);
if(nPosX >= Left + Width - 2 && nPosY >= Top + Height - 2)
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=990&d=70jx1b
{
// 鼠标位置在窗体的右下角附近
Msg.Result = HTBOTTOMRIGHT;
return;
}
else if(nPosX >= Left + Width -2)
{
// 鼠标位置在窗体右侧
Msg.Result = HTRIGHT;
return;
}
else if(nPosY >= Top + Height - 2)
{
// 鼠标位置在窗体下方
Msg.Result = HTBOTTOM;
return;
}
// 以上只判断鼠标位置是否在右侧,右下角,下方,所以仅仅当鼠标指针在这三个位置时才会改变成改变大小的形状,拖动后可改变大小。
break;
}
default:
break;
}
TForm::WndProc(Msg);
}
原文连接:http://hi.baidu.com/adoblog/blog/item/f43aac131de036065aaf53e2.html
[解决办法]
可以提示你一下:在C++Builder中,控件的Width的值,是等于GetWindowRect以后Rect中right-left的值,Height的值也是同理,所以。。。