MFC 窗口最大化和最小化,全局变量的使用、static居中显示、static的背景色设置为透明、根据屏幕自适应调整界面大小

5 篇文章 0 订阅

1、实现窗口的最大化和最小化

将对话框的Border选为None,添加两个按钮,min和close,将按钮的bitmap设置为TRUE;用于添加最小和最大的背景图片

双击min按钮事件中添加:

CWnd::ShowWindow(SW_SHOWMINIMIZED);


双击close按钮事件中添加:

exit(0);

调整位置:


2、添加一个模态对话框,非模态对话框可以拖动,模态对话框不能拖动。

打开类视图,单击选中要添加初始函数的类。在看对应的属性框,添加Onitdialog()

非模态:右键diag,插入diaglog;点击对话框,添加类

#include "DiagQuit.h"
Public:
DiagQuit *quitDiag;

DiagConnect::~DiagConnect()
{
	//添加一个释放模态对话框
	if (NULL!=quitDiag)
	{
		delete quitDiag;
	}

}

OnClose(){
	if (NULL==quitDiag)
	{
		quitDiag = new DiagQuit();
		quitDiag->Create(IDD_DIALOG_quit,this);
	}
	quitDiag->ShowWindow(SW_SHOW);
}


调用:

	//INT_PTR nRes;//typedef _W64 int INT_PTR   又把__W64 定义成 _W64...笑哭。。。

	//CDiaglogQuit tipDlg;//声明一个CTipDlg的对象 tipDlg

	//nRes = tipDlg.DoModal();//对象创建模型赋给那个整形指针。

	if (nRes == IDCANCEL) {//整形指针的结果如果是退出

		return;//就返回,对于当前这个按钮按下事件的处理结束。
	}
	//if (nRes== IDOK)
	//{
	//	exit(0);
	//}
	//else
	//{
	//	return;
	//}


4、全局变量的使用,这样就可以在对话框中调用另一个对话框,显示不同的值;同一个对话框根据不同情况显示不同的信息。

2。在stdafx.cpp中加入:
int myInt;
然后在stdafx.h中加入:
extern int myInt
这样定义以后无论在什么文件中都是可见的.


5、

选择这个控件-->属性

Align Text --> Center  左右居中

Center Image --> True 上下居中

6、将静态文本框的背景颜色设置为透明

在对话框中添加响应OnCtlColor

在响应函数中添加如下代码,注意静态文本框的id需要改变:

HBRUSH CDiaglogDeviceNoCon::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO:  在此更改 DC 的任何特性
	//在这里改变文本框的背景颜色,设置为透明
	//if (nCtlColor == IDC_STATIC_device)
	if(pWnd->GetDlgCtrlID()== IDC_STATIC_device)
	{
		//pDC->SetBkColor(RGB(255,0,0));//指定背景颜色
		pDC->SetTextColor(RGB(0,0,0));//文字的颜色
		pDC->SetBkMode(TRANSPARENT);//设置为透明,和下一句一起使用
		hbr = (HBRUSH)GetStockObject(NULL_BRUSH);//获取画笔颜色混合后的画笔,完成透明
	}

	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	return hbr;
}


设置文件框的背景色后,如果要动态的刷新文件框的内容,则会出现重叠现象;因为背景色已确定,每次都要已文本的自带的颜色画,背景色不能更新。但是可以采用单独刷新文本框的方法来修改,代码如下:

	//初始值
	CStatic * p = (CStatic *)GetDlgItem(IDC_STATIC_percent);
	p->SetWindowText((L" "));
	CRect rtlbl;
	GetDlgItem(IDC_STATIC_percent)->GetWindowRect(&rtlbl);
	GetDlgItem(IDC_STATIC_version)->GetWindowRect(&rtlbl);
	ScreenToClient(&rtlbl); //转到客户端界面
	InvalidateRect(&rtlbl);//最后刷新对话框背景 
	UpdateWindow();



7、根据屏幕自适应调整对话框大小

在消息有个WM_SIZE,添加函数OnSize,这样可以在函数内调整控件的大小,特别说明很多代码中利用当前控件比值与窗口大小比值再乘上当前窗口大小来改变控件大小。


...



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚努力的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值