各位,本人学习对话框也有一段时间了,总结了一下有3个小问题没弄明白,希望各位指点一下。1. 利用CFileDialog类进行操作,弹出的对话框一般有2个按钮,如果是利用
CFileDialog FileDlg( TRUE, NULL, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter );那么将出现 “打开”“取消”,这2个按钮的名称可以修改吗?比如改为“选择”,“放弃” ,应该怎样实现?
2.从某个对话框上设置按钮创建一个无模式对话框,用上
MyDlg->Create(IDD_DIALOG, NULL);//modeless dialogue
MyDlg->ShowWindow(SW_SHOW);
但是这个时候如果有多个对话框在界面上,那么点击其它的对话框,当创建的无模式对话框还在界面上的时候,会发现处于最上层的它遮挡了其它对话框。
是不是和 create函数参数设置有关,如何修改可以做到被点击对话框界面完全呈现而不被其他对话框遮挡?3. 把对话框的属性设置为Resizing ,可以实现拖拉放大。如何做到在拖拉放大的时候,对话框里边各个控件和用CPaintDC绘制的文字的相对布局不改变?
即原对话框中某个控件居中,拉伸后依然可以居中,一边拖拉对话框内各个控件的位置一边发生变化,但是界面不闪烁且整体布局不变。
CFileDialog FileDlg( TRUE, NULL, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter );那么将出现 “打开”“取消”,这2个按钮的名称可以修改吗?比如改为“选择”,“放弃” ,应该怎样实现?
2.从某个对话框上设置按钮创建一个无模式对话框,用上
MyDlg->Create(IDD_DIALOG, NULL);//modeless dialogue
MyDlg->ShowWindow(SW_SHOW);
但是这个时候如果有多个对话框在界面上,那么点击其它的对话框,当创建的无模式对话框还在界面上的时候,会发现处于最上层的它遮挡了其它对话框。
是不是和 create函数参数设置有关,如何修改可以做到被点击对话框界面完全呈现而不被其他对话框遮挡?3. 把对话框的属性设置为Resizing ,可以实现拖拉放大。如何做到在拖拉放大的时候,对话框里边各个控件和用CPaintDC绘制的文字的相对布局不改变?
即原对话框中某个控件居中,拉伸后依然可以居中,一边拖拉对话框内各个控件的位置一边发生变化,但是界面不闪烁且整体布局不变。
解决方案 »
- First-chance exception in my.exe (WININET.DLL): 0xC0000005: Access Violation.
- BYTE *pData 这样的数据怎么保存到数据库中
- jiangsheng(蒋晟) 大哥请进!!
- 我在A机器 发送多播 224.1.1.1 给几个端口。每个端口一个视频端口号为10000 10001 100002
- 急,为什么不能输入中文
- 一个初学问题,请帮帮忙
- 请问关于vector的问题
- 提问:我有一个已完成的程序(vc编的),如何将他变成dll形式?
- 线程结束时出了问题
- 请问在使用odbc时,如果数据库使用了密码,如何在程序中注册密码
- vc中编写mysql?
- 求两本书MFC书的IBSN号
2。setwindowpos
3。响应wm_size大小,进行重绘
4。楼主还是一题一问比较好
2、用SetWindowPos可以改变窗口的Z-order;
3、响应WM_SIZE消息,根据窗口尺寸用MoveWindow逐一设置控件,但不能保证不闪烁(依赖于窗口和控件的刷新速度)。
2、用SetWindowPos可以改变窗口的Z-order,使其成为TOPMOST即可;
3、添加WM_SIZE消息,通过GetClientRect得到窗口尺寸后再调用MoveWindow逐一调整各个子控件的位置。
1. 创建一个与客户区同样大小的位图
2. 将所有要描画的东西都画到这个位图上
3. 将位图贴到窗口上
注意,不要描画背景。也就是重载WM_ERASEBKGND消息,删掉里面的默认代码,然后返回TRUE。
双缓冲的主要代码如下(放到对话框的OnPaint()函数里):
CDC* pDC = GetDC(); //创建一个临时位图
CBitmap bmp;
pDC->SetTextAlign(TA_CENTER);
CRect rect;
CBrush b(RGB(255,255,255));
GetClientRect(rect); bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
CDC dc;
dc.CreateCompatibleDC(pDC);
CBitmap* pOldBmp = dc.SelectObject(&bmp); //开始:描画所要话的东西,记住,要用dc,不是pDC
dc.FillRect(rect, &b); //画背景
dc.SetBkMode(TRANSPARENT);
dc.DrawText("test", rect, DT_CENTER|DT_SINGLELINE);
//画到这里结束 //将图贴到客户区
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc, 0,0,SRCCOPY);
dc.SelectObject(pOldBmp);至于子控件移动位置时产生的闪烁可以这样去掉:
从资源浏览器里打开对话框的属性,将Clip Children属性选为TRUE就可以了。