首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

如何把这段鼠标拖动改变无边框窗体的代码改成C+SDK,或者MFC啊小弟我搞了半天不成,晕死了

2012-02-14 
怎么把这段鼠标拖动改变无边框窗体的代码改成C+SDK,或者MFC啊!我搞了半天不成,晕死了!在单元文件的.h文件

怎么把这段鼠标拖动改变无边框窗体的代码改成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的值也是同理,所以。。。

热点排行