标题栏 消息响应 单文档

Calarence 2010-10-21 10:04:50
我建立了一个单文档工程,请问,
1.怎样可以删除标题栏右边的还原按钮,只需要最大最小按钮,?
2.怎样改变标题栏的高度?
3.怎样屏蔽双击标题栏产生的还原消息事件??
...全文
121 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-11-19
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖

相关规定详见界面界面版关于版主结帖工作的具体办法
Sou2012 2010-10-23
  • 打赏
  • 举报
回复
自绘标题栏吧。
傻X 2010-10-22
  • 打赏
  • 举报
回复
1楼回答的很全,打个酱油。
问题3补充:在MainFrm的PretranslateMessage里面处理
wltg2001 2010-10-22
  • 打赏
  • 举报
回复
1.怎样可以删除标题栏右边的还原按钮,只需要最大最小按钮,?
=====================
问题是还原按钮与最大化按钮是一个吧

2.怎样改变标题栏的高度?
============
NONCLIENTMETRICS nm
调用SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(nm),&nm,0)
重设SystemParametersInfo(SPI_SETNONCLIENTMETRICS,sizeof(nm),&nm,0)

3.怎样屏蔽双击标题栏产生的还原消息事件??
=============
这个处理WM_NCLBUTTONDBLCLK 消息,在里面直接返回就行了。
qwd100815 2010-10-22
  • 打赏
  • 举报
回复
对话框的属性 Maximize Box 设成False 就能解决第一个问题了
Calarence 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 w774937253 的回复:]
我建立了一个单文档工程,请问,
1.怎样可以删除标题栏右边的还原按钮,只需要最大最小按钮,?
2.怎样改变标题栏的高度?
3.怎样屏蔽双击标题栏产生的还原消息事件??
[/Quote]

问题1,写错了,是只要最小化和关闭按钮。
问题2,我是这样写的,写在cmainframe类中,但是没有反应
问题3 ,这个消息响应我试过,但是没有作用,
向立天 2010-10-22
  • 打赏
  • 举报
回复
以下代码实现了你所有的需求
当然还有一些细节需要处理
你自己看一下吧
#include<afxwin.h>
#include<math.h>
class CMyWnd:public CFrameWnd
{
public:
afx_msg void OnNcLButtonDblClk(UINT nHitTest, CPoint point);

DECLARE_MESSAGE_MAP()
public:
afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp);
};

BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
ON_WM_NCLBUTTONDBLCLK()
ON_WM_NCCALCSIZE()
END_MESSAGE_MAP()

class CMyApp:public CWinApp
{
public:
BOOL InitInstance();
};

BOOL CMyApp::InitInstance()
{
CMyWnd *pFrame = new CMyWnd;

pFrame->Create(0, _T("title"), WS_SYSMENU|WS_MINIMIZEBOX);
pFrame->ShowWindow(SW_MAXIMIZE);

this->m_pMainWnd = pFrame;

return TRUE;
}

CMyApp ThisApp;

void CMyWnd::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
{
;
}

void CMyWnd::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
{
lpncsp->rgrc[0].top += 20;

CFrameWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
}
Calarence 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wltg2001 的回复:]

问题1,写错了,是只要最小化和关闭按钮。
==============
在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中写如下代码:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
……
[/Quote]
我测试的单文档,标题栏已经没有最大化按钮了,但是在初始化设为最大化的时候,再双击标题栏还是还原了。
Eleven 2010-10-22
  • 打赏
  • 举报
回复
1.还原按钮不是按最大化按钮之后窗口最大化以后,最大化就成了还原了
2。 自绘标题栏
3。 同上WM_NCLBUTTONDBLCLK消息
wltg2001 2010-10-22
  • 打赏
  • 举报
回复
问题3 ,这个消息响应我试过,但是没有作用,
==========
对于一个没有最大化按钮的窗口来说,你双击栏题并不会还原的。
wltg2001 2010-10-22
  • 打赏
  • 举报
回复
问题1,写错了,是只要最小化和关闭按钮。
==============
在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中写如下代码:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
cs.style=WS_OVERLAPPED | WS_SYSMENU |WS_MINIMIZEBOX ;

return TRUE;
}
就行了。

15,979

社区成员

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

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