重画标题栏的问题

CloudWater 2003-09-13 04:29:27
我重载了WM_NC****消息,重画了标题栏,但当有WM_HITTEST消息时标题栏上的那WINDOW画的最小化,最大化按钮,关闭按钮又给出来将我画的三按钮给覆盖回去了,可是又不知如何重载WM_HITTEST或WM_NCMOUSEMOVE消息使这种现象不发生又不影响窗体正常工作,比喻说改变大小,移动等。或有什么好的办法可以解决这个问题,请大虾们指点,谢谢!
...全文
123 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcpl 2003-09-13
  • 打赏
  • 举报
回复
不用屏蔽原来的标题按钮,在WM_NCLBUTTONDOWN时先LockWindowUpdate禁止窗口更新,再调用默认窗口过程,再UnlockWindowUpdate()

可参考代码
http://my.6to23.com/cigarette/cd3.zip

代码是用MFC写的,上述均针对MFC而言,不过道理是相同的,希望对你有用
SlayerCarrier 2003-09-13
  • 打赏
  • 举报
回复
OnSize()中重画客户区。
客户区的拖动如下:
void CMXXXXDlg::OnLButtonDown(UINT nFlags, CPoint point)
{

PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));
CDialog::OnLButtonDown(nFlags, point);
}
CloudWater 2003-09-13
  • 打赏
  • 举报
回复
long lStyle = GetWindowLong(pcs->hwnd, GWL_STYLE);
lStyle &= ~WS_CAPTION;
lStyle |= WS_MINIMIZEBOX;
SetWindowLong(pcs->hwnd, GWL_STYLE, lStyle);
SendMessage(pcs->hwnd, WM_SETICON, ICON_BIG, (LPARAM)CFormEx::m_hicon);
SendMessage(pcs->hwnd, WM_SETICON, ICON_SMALL, (LPARAM)CFormEx::m_hicon);

这样做之后,窗体的标题栏的事件都不响应了而且当将窗体变大时,增大的那部分就没标题栏了
SlayerCarrier 2003-09-13
  • 打赏
  • 举报
回复
sorry,我错了,还是SetWindowLong吧。
CloudWater 2003-09-13
  • 打赏
  • 举报
回复
to SlayerCarrier(狂暴杀手):
就没有ModifyStyle,老大。
SlayerCarrier 2003-09-13
  • 打赏
  • 举报
回复
::ModifyStyle(hWnd ,.....)//后面是一样的
CloudWater 2003-09-13
  • 打赏
  • 举报
回复
to kingzai(kingzai)兄:
用SDK如何做到第一行,SetWindowLong?
SlayerCarrier 2003-09-13
  • 打赏
  • 举报
回复
不要去掉WS_SYSMENU||WS_TITLEBAR而是WS_CAPTION,切记切记!
kingzai 2003-09-13
  • 打赏
  • 举报
回复
ModifyStyle( WS_CAPTION, WS_MINIMIZEBOX, SWP_DRAWFRAME );//设置图标
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CloudWater 2003-09-13
  • 打赏
  • 举报
回复
去掉的是WS_SYSMENU风格
SlayerCarrier 2003-09-13
  • 打赏
  • 举报
回复
任务栏没有程序图标?去掉的是WS_CAPTION属性,应该有的,我试过的!.用MoidfyStyle去掉啊!(好象拼错了)
SlayerCarrier 2003-09-13
  • 打赏
  • 举报
回复
在画标题栏的时候先使所有的区域无效试一试。
CloudWater 2003-09-13
  • 打赏
  • 举报
回复
如果去掉系统菜单可以解决,但在任务栏没有程序图标了,如何解决?
flyever 2003-09-13
  • 打赏
  • 举报
回复
up
kingzai 2003-09-13
  • 打赏
  • 举报
回复
将标题栏去掉,自己模拟标题栏。重载OnNcLButtonDblClk,OnNcMouseMove,OnPaint函数。
CloudWater 2003-09-13
  • 打赏
  • 举报
回复
我们的程序是已经做好的,没办法调整控件位置,而且有的是MDI窗体
SlayerCarrier 2003-09-13
  • 打赏
  • 举报
回复
这个问题我以前遇到过的,重话标题栏确实不是一种好办法。
我是这样的:把窗口的WS_CAPTION属性去掉.这样窗口就没有标题栏了。
再在客户区画一个标题栏,做几个button模仿系统菜单按钮。在实现
客户区的鼠标拖动。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧