求这样一个界面的实现方案

starytx 2017-05-25 12:40:17
MFC对话框程序,目前的界面是系统默认的,现在要搞这样的界面,登录界面,主界面,还有一些小细节,如下图所示:

这是登录界面,要求客户区那个图片(除去【用户登录】块)是可以动态加载的,以便显示一些广告。

这是主界面,标题可以是固定的,版本号可以修改,接下来是几个tab(或者按钮,总之就是点击后,在客户区打开对应的界面或者加载对应的web页),通知显示,帮助(无非就是点击后打开一个对象),下拉三角,鼠标移动到上边后,自动下拉一个菜单,如下图那样:

再就是最小化最大化和关闭了。通过拖拽标题栏的空闲区可以移动窗体。这样的界面怎么实现呢?一般都使用哪种方法来搞?界面美化做得少,希望大神赐教。
...全文
457 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
starytx 2017-05-27
  • 打赏
  • 举报
回复
现在就差那个下拉菜单不好弄了,MFC的默认菜单没有那种效果
大树学长 2017-05-27
  • 打赏
  • 举报
回复
没有什么难度,就是要花费点时间,还是要看你们的UI库牛不牛了,mfc做这么漂亮的界面需要的自绘类还是不少的
hurryboylqs 2017-05-27
  • 打赏
  • 举报
回复
嗯,只是一个飞客户区自绘Demo,其他自己改下就好
starytx 2017-05-27
  • 打赏
  • 举报
回复
引用 21 楼 hurryboylqs 的回复:
MFC其实也好做的,不过我现在倾向用duilib了,主要是写布局方便
弄好了,原来还有OnSize里边也有一处是两个一起判断的,分开判断就好了,不过去掉最大化后还得调整最小化的位置,要不然最大化那里是空的,哎,好麻烦啊,得弄成自动的,之前的那几个位置都是写死的
starytx 2017-05-27
  • 打赏
  • 举报
回复
引用 21 楼 hurryboylqs 的回复:
MFC其实也好做的,不过我现在倾向用duilib了,主要是写布局方便
改好了,不过还是有点不明白,你那个最小化最大化按钮好像没有办法控制(取消或者禁用),比如我在PreCreateWindow中加上cs.style &= ~WS_MAXIMIZEBOX;去不掉最大化按钮,只不过鼠标移到上边后不改变样子而已,点击还是有最大化作用。感觉你那块最小化最大化那里可能有点乱,你之前的逻辑是这样的:
	if (m_bHaveMaxBox || m_bHaveMinBox)
	{
		pButton = AddTitleButton(rcControl, m_WindowBtnImage[1], 3, ID_MAX_BTN);
		if (!m_bHaveMaxBox)
		{
			pButton->EnableButton(FALSE);
		}

		pButton = AddTitleButton(rcControl, m_WindowBtnImage[0], 3, ID_MIN_BTN);
		if (!m_bHaveMinBox)
		{
			pButton->EnableButton(FALSE);
		}

	}
我将两者分别判断来决定是否添加某一个
	if (m_bHaveMaxBox)
	{
		pButton = AddTitleButton(rcControl, m_WindowBtnImage[1], 3, ID_MAX_BTN);
		if (!m_bHaveMaxBox)
		{
			pButton->EnableButton(FALSE);
		}
	}
	if (m_bHaveMinBox)
	{
		pButton = AddTitleButton(rcControl, m_WindowBtnImage[0], 3, ID_MIN_BTN);
		if (!m_bHaveMinBox)
		{
			pButton->EnableButton(FALSE);
		}
	}
但是这样改了以后,如果我去掉一个,比如最大化,运行后鼠标刚往标题栏一放触发重绘就崩了,好像定位了是Image的GetWidth。不知道这样会什么会引发这个
dvlinker 2017-05-27
  • 打赏
  • 举报
回复
引用 27 楼 chenlycly 的回复:
用directui能实现很炫的效果,使用的duilib,网上就有人使用duilib实现kugou界面效果的
http://blog.csdn.net/zhuhongshu/article/details/41037875/
dvlinker 2017-05-27
  • 打赏
  • 举报
回复
用directui能实现很炫的效果,使用的duilib,网上就有人使用duilib实现kugou界面效果的
starytx 2017-05-26
  • 打赏
  • 举报
回复
引用 13 楼 hurryboylqs 的回复:
网页就行,用IE控件加载
感觉登录那个是需要用网页了,标题栏那种这边要求用mfc,登录那个用mfc应该不好弄了
hurryboylqs 2017-05-26
  • 打赏
  • 举报
回复
MFC其实也好做的,不过我现在倾向用duilib了,主要是写布局方便
hurryboylqs 2017-05-26
  • 打赏
  • 举报
回复
引用 15 楼 starytx 的回复:
[quote=引用 13 楼 hurryboylqs 的回复:] 网页就行,用IE控件加载
大神,我用的你那个NCSkinDemo,做了些修改,现在有一点问题需要请教。 比如我想在最大化最小化前边加几个按钮,我现在也加好了,鼠标移动点击也可以正常的响应,如下图: 添加代码如下:
	pButton = AddTitleButton(rcControl, m_WindowBtnImage[3], 2, ID_MSG_BTN );
	pButton = AddTitleButton(rcControl, m_WindowBtnImage[4], 2, ID_HELP_BTN );
	pButton = AddTitleButton(rcControl, m_WindowBtnImage[5], 2, ID_INFO_BTN);
我想在那个通知图标后边加个显示通知个数的文本,帮助图标后边加上文字“帮助”,结果加上后效果如下: 我的这三个小图片都是30*30的,所以我觉得是不是画的尺寸不对(需要给文字留出空间),可我调整image尺寸也不行, 我不太明白这种前边带一个图标后边接文字的按钮怎么画?我看你那个按钮类DUIButton里边有一个SetIconInfo可以设置图标,但不明白,按钮背景怎么处理呢,因为我现在的做法相当于把图标当背景画的按钮[/quote] 你改下DUIButton的绘制部分就行了,不会改的话我看看改个给你,居然还知道用这个,哈哈
oyljerry 2017-05-26
  • 打赏
  • 举报
回复
这种界面还是用web来做方便,没必要用自己用控件等来吃这个苦啊
三岁、就很帅 2017-05-26
  • 打赏
  • 举报
回复
那你就弄几个图贴下就完事了呗
starytx 2017-05-26
  • 打赏
  • 举报
回复
引用 16 楼 swwllx 的回复:
MFC做UI是吃力的很啊
还好我这个只做一点框架,没有啥控件,就标题栏那点东西,那个登录估计要web做了,mfc做那种效果太费劲
三岁、就很帅 2017-05-26
  • 打赏
  • 举报
回复
MFC做UI是吃力的很啊
starytx 2017-05-26
  • 打赏
  • 举报
回复
引用 13 楼 hurryboylqs 的回复:
网页就行,用IE控件加载
大神,我用的你那个NCSkinDemo,做了些修改,现在有一点问题需要请教。
比如我想在最大化最小化前边加几个按钮,我现在也加好了,鼠标移动点击也可以正常的响应,如下图:

添加代码如下:
	pButton = AddTitleButton(rcControl, m_WindowBtnImage[3], 2, ID_MSG_BTN );
pButton = AddTitleButton(rcControl, m_WindowBtnImage[4], 2, ID_HELP_BTN );
pButton = AddTitleButton(rcControl, m_WindowBtnImage[5], 2, ID_INFO_BTN);

我想在那个通知图标后边加个显示通知个数的文本,帮助图标后边加上文字“帮助”,结果加上后效果如下:

我的这三个小图片都是30*30的,所以我觉得是不是画的尺寸不对(需要给文字留出空间),可我调整image尺寸也不行,

我不太明白这种前边带一个图标后边接文字的按钮怎么画?我看你那个按钮类DUIButton里边有一个SetIconInfo可以设置图标,但不明白,按钮背景怎么处理呢,因为我现在的做法相当于把图标当背景画的按钮
hurryboylqs 2017-05-25
  • 打赏
  • 举报
回复
网页就行,用IE控件加载
baijiazhao 2017-05-25
  • 打赏
  • 举报
回复
方案1:控件自绘。 方案2:使用duilib。 你已有mfc的产品,表面上方案1比较快,但是控件自绘的坑也比较多,比如你那个效果的菜单就不好自绘,搞不好会坑死人的。 反正没几个页面,页面也不复杂,建议用duilib的例子重写一个ui吧。
lang14 2017-05-25
  • 打赏
  • 举报
回复
如果能用duilib很好实现,但是现在已经是MFC对话框了,只能重绘,背景就贴图吧,控件需要重绘,客户想在登录界面做小广告,你可以先预留一个图片控件,每次启动程序去某个路径读取指定图片进行加载就好,客户想放什么图片自己把图片放到那个路径中, 标题拖动:把系统的的标题去掉,自己重绘,然后现指定区域设置可以拖动就行了
worldy 2017-05-25
  • 打赏
  • 举报
回复
创建一个无边框的窗口,自己手工绘画一个图片做为背景,菜单栏也自己编写无边框的一个窗口类
cutmelon 2017-05-25
  • 打赏
  • 举报
回复
引用 8 楼 starytx 的回复:
引用 7 楼 cutmelon 的回复:
最简单就是嵌个浏览器用页面做,mfc代码撑死了拦截一下点击操作,页面甚至可以用js给程序传递数据
这个已经做了,现在要求MFC这边再做一些界面的框架,所以,估计我需要自绘标题栏了
这样说的话,你找一套UI库不就行了,应该有现成的,你看百度云盘pc端那些都是差不多的套路
加载更多回复(8)

15,979

社区成员

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

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