主界面设计+自定义按钮实现tab控件功能

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

网上找的tab控件总是太丑,不符合我们美工的审美要求.就要求我用按钮来实现对话框的切换.这样button就可以采用美工设计的icon了.(最近发觉跟美工合作开发ui也是一件很愉快的事情,除了美工老是埋怨我不能按他的要求来实现界面,没办法,能力有限啊.谁让我用vc呢) 

采用技术:mfc类

首先让美工画出一张软件界面背景图作为主界面,vc的picture只能支持bmp格式,而且放在vc程序中还有点失真.背景图内容包括各个按钮及自绘标题栏.还有要切换的子对话框的位置.用ps或其他工具量出各个按钮的左上角的坐标位置以及长宽,子对话框也如此.

对话框类:

//buttons' IDs
const UINT BUTTON_ONE= 1111;
const UINT BUTTON_TWO= 1112;

and location

 

const CPoint DLG_LOCATION(19299);
const CPoint BTNONE_LOCATION(34130);
const CPoint BTNTWO_LOCATION(108130);

 

//button size
const int BUTTON_WIDTH = 53;
const int BUTTON_HEIGHT = 42;

新建几个对话框,style改成child,title bar 和system menu去掉
并在主对话框头文件声明这几个类
定义几个bool变量来表示对话框是否被打开和是否激活.
由于我们去掉了标题栏,为了在任务栏显示程序名称,在OnInitDialog中写上
 SetWindowText("Soben Digital Home");

                    //create first button
    m_pBtnOne = new CMyButton;
    RECT rectOne;
    rectOne.left 
= BTNONE_LOCATION.x;
    rectOne.right 
= BTNONE_LOCATION.x+BUTTON_WIDTH;
    rectOne.top 
= BTNONE_LOCATION.y;
    rectOne.bottom 
= BTNONE_LOCATION.y+BUTTON_HEIGHT;

    m_pBtnOne 
->Create("", WS_CHILD | WS_VISIBLE | WS_TABSTOP|BS_BITMAP, rectOne, this, BUTTON_ONE);
    HBITMAP   hBmpOne
=::LoadBitmap(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_ONE));   
                     
// 美工截取出的bmp图标,导入到资源中
    m_pBtnOne->SetBitmap(hBmpOne);   
    
//Create second button
    m_pBtnTwo = new CMyButton;
    RECT rectTwo;
    rectTwo.left 
= BTNTWO_LOCATION.x;
    rectTwo.right 
= BTNTWO_LOCATION.x+BUTTON_WIDTH;
    rectTwo.top 
= BTNTWO_LOCATION.y;
    rectTwo.bottom 
= BTNTWO_LOCATION.y+BUTTON_HEIGHT;

    m_pBtnTwo
->Create("", WS_CHILD | WS_VISIBLE | WS_TABSTOP|BS_BITMAP, rectTwo, this,BUTTON_TWO);
    HBITMAP   hBmpTwo
=::LoadBitmap(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_TWO));   
    m_pBtnTwo
->SetBitmap(hBmpTwo); 

这里我用的是一个重载的CButton类,用于实现鼠标滑过改变一段文字.(懒得改了,用CButton类也一样

由于去掉了系统标题栏,并须自己写程序来实现最小化以及关闭功能

// 两个按钮消息,简单实现
void CMain::OnButtonCloseClicked()
{
      SendMessage(WM_CLOSE);
}

void CMain::OnButtonMinClicked()
{
       SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, NULL);
    
}

关键地方来了,如何切换对话框,请教了很多前辈后,决定用showwindow这一简单方法来实现对话框的显示和隐藏

void CMain::OnButtonOneClicked()
{
    
if (bOneActed==1)// 如果对话框已经激活
    {
        
return;
    }

    
if (bTwoActed==1)// 已打开另一对话框则关闭
    {
        m_pPageTwo
->ShowWindow(FALSE);
        bTwoActed
=0;
    }

        
if(bOneOpened==0){// 对话框未创建过
        
//create the TabDialog
        m_pPageOne = new COneDlg();
        m_pPageOne
->Create(IDD_ONE_DIALOG, this);
        
//set the TabDialog's positon
        m_pPageOne->SetWindowPos(this, DLG_LOCATION.x, DLG_LOCATION.y, 0 , 0, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
        bOneOpened
=1;// 对话框创建过
    }

    
else// 创建过则直接显示
        m_pPageOne>ShowWindow(TRUE);
    bOneActed
=1;
}
暂时没出现什么问题,对话框闪烁问题已在另一文章中解决.不过仍有打开别的程序后在切换回来后子对话框背景会一团遭,现在想应该是OnEraseBkgnd里直接return true的缘故,看有什么办法来既解决闪烁又解决背景不刷新的问题
母版与Tab导航的完美融合,轻松实现可视化大屏多页面的跳转 大屏设计母版是在大屏设计器中,用于在多个页面中展示相同的内容模版,且在各个页面中处于底层的展示,母版的作用1、统一性与标准化内容一致性:母版作为通用组件,可以在不同的页面中使用,并保持组件内容、样式、位置的一致性。这意味着,一旦在母版中做了修改,所有引用该母版的页面都会同步更新,极大地提高了设计效率和一致性。标准化设计:通过母版,设计者可以确保大屏中重复出现的元素(如标题栏、底部导航栏等)具有统一的格式和风格,从而增强整体设计的专业性和美观性。2、提高设计效率快速复用。 阅读详情

相关推荐

Axure实现Tab选项卡切换功能

Axure实现Tab选项卡切换功能 小技巧 上例的四个选项卡就是动态面板的四个状态,这几个状态有一些公共的内容,比如选项卡的四个按钮(即上例中的四张图片)和各个按钮相应的单击事件,所以为了高效省时,可以先做出一个选项卡的内容来,然后可以直接将这个选项卡的公共内容部分复制到其他选项卡中,这样也可以避免位置调整不佳而导致点击每个选项卡切换时会来回“跳动”(在Axure中从一处复制内容到另一处时,内容本身的属性、事件、坐标等性质均不变)。

点滴汇聚,智在积累。——Danny 4万+

C#漂亮的TAB控件

源码已上传至: http://www.jiamaocode.com/Pros/1038.htm

用回车键实现MFC对话框中TAB控件输入焦点在控件中跳转的效果

用回车键实现MFC对话框中TAB控件输入焦点在控件中跳转的效果

eickandy的专栏 2904

VC 6.0中Tab控件实现实例

根据网上一篇文章做的 tab的基本实现都有

tab栏切换的实现

tab栏切换

zhaoyifei01的博客 4215

UE5蓝图实现tab显示隐藏切换效果

本文介绍了Tab栏切换功能实现逻辑:1)创建自定义事件隐藏所有栏目;2)点击时显示当前栏目并隐藏其他栏目;3)通过按钮背景图切换实现高亮效果(需准备选中/未选中两种状态的图片素材)。关键点包括按钮的三个交互事件(触摸、按下、松开)必须完整连接,以及需要定义两个Slate笔刷变量来存储不同状态的背景图片。实现步骤简洁明了,通过图片直观展示了效果差异。

PLB1314的博客 436

如何实现TAB切换时按钮变换样式

主要包括:需求收集、需求引导、招标文件编写、产品演示、用户参观我公司项目、品牌选择,技术方案编写、图纸设计及深化,报价清单制作、投标文件制作、深化设计等。对行业进行深入研究,了解竞争对手的产品、方案特点,了解竞争对手的资质及样板示范,最新的产品动态、市场动态及商务特点,形成对公司自身竞争价值的理解。、一年以上成功的相关产品售前、技术支持工作经验,责任心强,市场开拓能力强,善于沟通,有较强的应变能力。、阳光心态:较高责任心,紧急事务的抗压能力,例外项目的推进能力,有挑战精神,学习能力强。、两年左右工作经验。

2301_78256053的博客 1807

前端项目实践案例——制作Tab选项卡点击切换效果

制作Tab选项卡点击切换效果

shhghvvh的博客 4407

VC++实现Tab键选择控件的教程

本章节将为读者提供一个关于Microsoft Foundation Classes (MFC) 的基础概念介绍。MFC是一个用于创建Windows应用程序的C++库,广泛应用于界面驱动的应用程序开发中。它封装了部分Windows API,简化了程序设计,特别是在处理GUI元素如窗口、控件、消息等时,MFC通过面向对象的方法提供了一种更为直接和高效的操作方式。我们将首先概述MFC的历史背景,简述它的核心组件和它如何使得Windows编程更加容易。

weixin_36288992的博客 1198

网页Tab控件的跨浏览器实现

Tab控件,又称为标签页控件,是现代网页设计中不可或缺的一部分。其核心功能是通过让用户点击不同的Tab(标签),在同一个区域切换显示不同的内容面板。这样既节省了页面空间,又提高了用户的浏览效率和体验。

weixin_42433737的博客 860

c++学习 | MFC —— 控件介绍

VS2022中MFC的全部控件

驚蟄的博客 7621

JS仿大旗网的大屏Tab式图文切换菜单效果.rar

JS仿大旗网的大屏Tab式图文切换菜单效果,某日在大旗网上闲逛时看到的,觉得不错就把这个菜单整理出来,适合做数码产品类、门户类网站使用。

深入探索JavaScript经典Tab控件实现

Tab控件,也被广泛称为标签页控件,是一种在图形用户界面中常见的导航元素。它允许用户通过一系列的水平或垂直标签来切换不同的内容区域。每个标签背后通常连接着一块面板,当用户选择一个标签时,相应的面板会显示内容,而其他面板则隐藏,从而实现了在同一视图区域内切换不同视图的效果。Tab控件功能主要体现在以下几点:内容组织:Tab控件能够有效地组织大量信息,通过不同的标签将信息分类,使得用户可以直观地找到自己感兴趣的部分。空间优化。

weixin_33622085的博客 769

深入探索自定义TAB控件的绘制与优化技术

和文件虽然分属于不同的控件,但它们在某些高级功能实现上可能存在依赖关系。例如,在一个复杂的GUI系统中,树形控件和标签控件可能需要交互以提供更丰富的用户界面。依赖关系的管理是通过在和类中定义适当的接口来实现的。这样,两个控件能够相互通信并共享必要的数据和状态信息。// 示例代码段:接口定义示例public:// 获取当前选中的节点// 其他接口...public:// 获取当前激活的标签索引// 其他接口...上述代码段展示了和接口的定义,这些接口在和。

weixin_34779181的博客 787

c#Winform自定义控件-目录

官网: http://hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git 如果觉得写的还行,请点个 star 支持一下吧 欢迎前来交流探讨: 企鹅群568015492 ~~~持续增加中~~...

刘欢的博客 2758

C#编程基础(下)—窗体程序技巧1:敲回车实现登录按钮功能、按Tab实现光标在不同控件之间的顺序切换

C#制作Winform窗体程序技巧1:在C# 登录窗体中,敲回车即可进行登录 实现效果:在登录界面一敲回车,就相当于点击登录按钮实现方法:设置该窗体的AcceptButton属性即可,AcceptButton属性值默认是“无”,单击旁边的下拉符号,在下拉菜单里选择要“替代”的按钮名称即可。 实现原理:窗体的AcceptButton属性,即窗体的“接受”按钮。如果设置了此按钮,则用户每次按...

王迪 1952

用回车键实现MFC对话框中TAB键控制输入焦点在控件中跳转的效果

          近日在为一个数据应用写数据输入界面,大量的编辑框要想实现快速的输入就是有设计良好的符合工作流程的TAB键序。相信,不少的人在使用具有大量编辑框的程序时都有这样的想法和感概。而我这个对话框界面主要输入的是数字,因此如果使用TAB键作编辑框之间的跳转会在使用数字键盘时不方便。因此,就考虑了用回车键来实现TAB键的功能。因为MFC对话框的特点,基于MFC对话框的对话框按下回车键会调用

一点一滴的积累 3516

Qt Creator登录界面布局设计控件介绍

1、点击左侧Buttons中的PushButton进行拖拽,点击修改名字为登录--->QAbstractButton--->点击小三角---->点击选择资源。2、点击上述添加的资源文件---->iconSize可以修改图片的大小5.1封装自定义文件1、添加文件2、Qt--->Qt设计师界面类---->Choose3、Widget---->下一步4、修改类名---->下一步--->完成。5、 点击smallWidget.ui。

m0_69021252的博客 1245

MFC 自绘控件实现 竖排TAB sheet控件

MFC 自绘控件实现 竖排TAB sheet控件 去发现同类优质开源项目:https://gitcode.com/ 本资源文件提供了一个MFC自绘控件实现,该控件实现了竖排Tab选择功能,并支持添加图标,适用于需要在界面中实现竖向Tab布局的开发者。 资源描述 MFC自带的TabSheet控件默认是横排按钮在上面的布局。本资源中的自绘控件,则是在左侧实现竖排Tab选择,为开发者提供了更灵活的界面...

gitblog_06746的博客 473
上一篇: 双缓冲加重载onpaint,OnEraseBkgnd解决屏幕闪烁问题
下一篇: Objective-C基本功 -Category, Protocol, Property, Fast Enumation
husoso
博客等级 码龄20年 16粉丝 111原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值