怎样在标题栏上放控件?

windywater119 2017-11-08 11:00:21
我想在原生标题栏上放置按钮等控件,而不是做个无边框窗口自绘标题栏,尝试了一下DwmExtendFrameIntoClientArea,没有达到预期效果,像IE、Chrome这些是如何做到的?请赐教~~
...全文
422 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2017-11-10
  • 打赏
  • 举报
回复
好啊,不过 WPARAM wParam = MAKEWPARAM(GetDlgCtrlID(), BN_CLICKED); 这句 GetDlgCtrlID(), 是多余的 直接 写 0.
耳边呢喃 2017-11-10
  • 打赏
  • 举报
回复
标题栏好像是无法加入控件的
zgl7903 2017-11-09
  • 打赏
  • 举报
回复
引用 10 楼 schlafenhamster 的回复:
m_TestButton.CreateEx(0,_T("BUTTON"),_T("Test"),WS_POPUP|WS_VISIBLE, CRect(0,0,0,0), this,0); m_TestButton.SetDlgCtrlID(1000); // 这句 failed ! 这个 按钮 的 ID =0 ; (这样产生的 按钮 ID 都=0, 区分这种按钮 得用 hwnd) 见 UINT uID = LOWORD(wParam); // ==0 if(uNotify == BN_CLICKED && uID == (UINT)m_TestButton.GetDlgCtrlID() /* == 0 */ )
之前测试只用了一个按钮 所以没留意这个问题, 多谢提醒!! 可以改造一下
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
  // TODO: Add your message handler code here and/or call default
  CWnd *pParent = GetParent();
  if((GetStyle() & WS_POPUP) && pParent)
  {
    WPARAM wParam = MAKEWPARAM(GetDlgCtrlID(), BN_CLICKED);
    pParent->PostMessage(WM_COMMAND, wParam, (LPARAM)m_hWnd);
  }   
  CButton::OnLButtonDown(nFlags, point);
}
 
BOOL CDlg5Dlg::OnCommand(WPARAM wParam, LPARAM lParam) 
{
  // TODO: Add your specialized code here and/or call the base class
  UINT uNotify = HIWORD(wParam);
  UINT uID = LOWORD(wParam);
  if(uNotify == BN_CLICKED && (HWND)lParam == m_TestButton.m_hWnd)
  {
    AfxMessageBox(_T("Button clicked!"));
  }
   
  return CDialog::OnCommand(wParam, lParam);
}

schlafenhamster 2017-11-09
  • 打赏
  • 举报
回复
m_TestButton.CreateEx(0,_T("BUTTON"),_T("Test"),WS_POPUP|WS_VISIBLE, CRect(0,0,0,0), this,0); m_TestButton.SetDlgCtrlID(1000); // 这句 failed ! 这个 按钮 的 ID =0 ; (这样产生的 按钮 ID 都=0, 区分这种按钮 得用 hwnd) 见 UINT uID = LOWORD(wParam); // ==0 if(uNotify == BN_CLICKED && uID == (UINT)m_TestButton.GetDlgCtrlID() /* == 0 */ )
sevancheng 2017-11-09
  • 打赏
  • 举报
回复
不是有菜单栏,工具栏么
smwhotjay 2017-11-09
  • 打赏
  • 举报
回复
这什么奇怪需求,标题就是干标题的活,
oyljerry 2017-11-09
  • 打赏
  • 举报
回复
浏览器等应该都是自绘的,只有这样才能灵活,好自己处理
向立天 2017-11-09
  • 打赏
  • 举报
回复
标题栏是放不了通用控件的,可以通过自绘非客户区的方式绘制自定义的控件在上面
schlafenhamster 2017-11-08
  • 打赏
  • 举报
回复
DwmExtendFrameIntoClientArea 是 Extends the window frame into the client area.
赵4老师 2017-11-08
  • 打赏
  • 举报
回复
百度搜相关关键字。
零隐 2017-11-08
  • 打赏
  • 举报
回复
引用 楼主 dowithsmiles 的回复:
我想在原生标题栏上放置按钮等控件,而不是做个无边框窗口自绘标题栏,尝试了一下DwmExtendFrameIntoClientArea,没有达到预期效果,像IE、Chrome这些是如何做到的?请赐教~~
会不会是无边框对话框。
zgl7903 2017-11-08
  • 打赏
  • 举报
回复
以WS_POPUP风格创建就有可能 在标题栏放一个按钮的测试代码

//从CButton派生新类 处理 WM_LBUTTONDOWN 消息, 发送按下消息
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
  // TODO: Add your message handler code here and/or call default
  CWnd *pParent = GetParent();
  if((GetStyle() & WS_POPUP) && pParent)
  {
    WPARAM wParam = MAKEWPARAM(GetDlgCtrlID(), BN_CLICKED);
    pParent->PostMessage(WM_COMMAND, wParam);
  }
  
  CButton::OnLButtonDown(nFlags, point);
}
//在对话框上测试 //Dlg5Dlg.h

class CDlg5Dlg : public CDialog
{
CMyButton m_TestButton;

BOOL CDlg5Dlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  // Set the icon for this dialog.  The framework does this automatically
  //  when the application's main window is not a dialog
  SetIcon(m_hIcon, TRUE);      // Set big icon
  SetIcon(m_hIcon, FALSE);    // Set small icon

  // TODO: Add extra initialization here
  m_TestButton.CreateEx(0, _T("BUTTON"),
    _T("Test"), WS_POPUP|WS_VISIBLE,  CRect(0, 0, 200, 40), this, 0);
  m_TestButton.SetDlgCtrlID(1000);

  return TRUE;  // return TRUE  unless you set the focus to a control
}

BOOL CDlg5Dlg::OnCommand(WPARAM wParam, LPARAM lParam) 
{
  // TODO: Add your specialized code here and/or call the base class
  UINT uNotify = HIWORD(wParam);
  UINT uID = LOWORD(wParam);
  if(uNotify == BN_CLICKED && uID == m_TestButton.GetDlgCtrlID())
  {
    AfxMessageBox(_T("Button clicked!"));
  }
  
  return CDialog::OnCommand(wParam, lParam);
}

//处理 WM_WINDOWPOSCHANGED 消息
void CDlg5Dlg::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
  CDialog::OnWindowPosChanged(lpwndpos);
	
  // TODO: Add your message handler code here
  if(m_TestButton.m_hWnd)
  {
    CRect rcRect;
    GetWindowRect(&rcRect);  
    m_TestButton.MoveWindow(rcRect.left+20, rcRect.top, 100, 40);
  }	
}

第1章 窗体与界面设计   1.1 菜单应用实例    实例001 在系统菜单中添加菜单项    实例002 带图标的程序菜单    实例003 根据表中数据动态生成菜单    实例004 浮动的菜单   1.2 弹出菜单应用实例    实例005 在控件上单击右键弹出菜单    实例006 个性化的弹出菜单    实例007 任务栏托盘弹出菜单   1.3 工具栏应用实例    实例008 带背景的工具栏    实例009 带图标的工具栏    实例010 带下拉菜单的工具栏    实例011 可调整按钮位置的工具栏    实例012 XP风格工具栏    实例013 动态设置是否显示工具栏按钮文本    实例014 具有提示功能的工具栏   1.4 状态栏应用实例    实例015 带进度条的状态栏    实例016 动画效果的状态栏    实例017 滚动字幕的状态栏   1.5 导航界面应用实例    实例018 Outlook导航界面    实例019 树状导航界面    实例020 按钮导航界面    实例021 图片导航界面   1.6 界面窗体应用实例    实例022 使用位图设计畸形界面    实例023 椭圆形的程序界面    实例024 自绘窗体界面    实例025 以时钟显示界面    实例026 窗体融合技术    实例027 限制对话框最大时的窗口大小    实例028 分割视图窗口    实例029 对话框全屏显示   1.7 多媒体宣传光盘应用实例    实例030 多媒体宣传光盘主界面    实例031 自动运行的多媒体宣传光盘   1.8 多媒体触摸屏程序应用实例    实例032 采购中心多媒体触摸屏程序    实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例    实例034 不可移动的窗体    实例035 始终在最上面的窗体    实例036 以动画形式显示窗体    实例037 磁性窗体   1.10 窗体标题栏应用实例    实例038 闪烁的窗体标题栏    实例039 拖动没有标题栏的窗体    实例040 禁用标题栏上的最大化、最小化或关闭按钮   1.11 窗体形状及应用    实例041 半透明窗体    实例042 创建字型窗体    实例043 设计桌面精灵   1.12 通用对话框的应用    实例044 打开位图预览对话框    实例045 打开Windows新型对话框    实例046 同时选择多个文件    实例047 文本替换对话框    实例048 字体选择对话框  第2章 控件应用   2.1 按钮控件典型实例    实例049 AVI动画按钮    实例050 GIF动画按钮    实例051 图文按钮    实例052 不规则按钮    实例053 热点按钮   2.2 编辑框控件典型实例    实例054 为编辑框设置新的系统菜单    实例055 为编辑框控件添加列表选择框    实例056 多彩边框的编辑框    实例057 改变编辑框文本颜色    实例058 不同文本颜色的编辑框    实例059 位图背景编辑框   2.3 静态文本控件典型实例    实例060 电子计时器    实例061 使用静态文本控件设计群组框    实例062 制作超链接控件   2.4 列表框控件典型实例    实例063 利用列表框控件实现标签式数据选择    实例064 具有水平滚动条的列表框控件    实例065 列表项的提示条    实例066 位图背景列表框控件   2.5 组合框控件典型实例    实例067 将数据表中的字段添加到组合框控件    实例068 带查询功能的组合框控件    实例069 自动调整组合框的宽度    实例070 颜色组合框    实例071 多列显示的组合框    实例072 带图标的组合框    实例073 显示系统盘符组合框   2.6 列表视图控件典型实例    实例074 Windows资源管理器    实例075 利用列表视图控件浏览数据    实例076 利用列表视图控件制作导航界面    实例077 在列表视图中拖动视图项    实例078 具有排序功能的列表视图控件    实例079 具有文本录入功能的列表视图控件    实例080 使用列表视图设计登录界面   2.7 树视图控件典型实例    实例081 多级数据库树状结构数据显示    实例082 节点拖动功能的树控件    实例083 带复选功能的树状结构    实例084 三态效果树控件    实例085 修改树控件节点连线颜色    实例086 位图背景树控件    实例087 显示磁盘目录    实例088 树型提示

15,980

社区成员

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

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