文档库 最新最全的文档下载
当前位置:文档库 › 用VC++定制通用对话框

用VC++定制通用对话框

用VC++定制通用对话框
用VC++定制通用对话框

用VC++定制通用对话框

对话框概述

一个通用对话框是由Windows设计和编写的,用于完成某一特定工

作,比如打开一个文件或选择一种颜色等。MFC提供了管理每一通用对

话框类型的类,这些类概括在下表中。表1

例如:处理File菜单上Open和Save As命令时使用CFileDialog通

用对话框,而处理Prin和Print Setup命令时则使用CPrintDialog通用对话框。

用这些对话框构造用户应用是很方便的,但有时这些通用对话框

的外部特性和行为不能满足用户要求,特别是在对话框上需要增加某

些控件或删除某些控件时尤为突出。本文提供给大家一种方法来定制

通用对话框的外部特性和行为,可用自己的代码与MFC提供的类协同处

理这些对话框,以满足用户的不同要求。一方面由于使用了MFC的通用

对话框类,节省了大量的代码编程工作,提高了开发效率;另一方面,采

用自己的代码协同实现,使对话框的功能可以做到灵活多样。本文以F ile Open命令为例,来阐述这一方法。

定制File Open通用对话框

CFileDialog类封装Windows公共文件对话框。公共文件对话框以

一种与Windows标准一致的方式,提供了实现File Open和File Save A s对话框(及其他文件选择对话框)的简单方法。

CFileDialog中有一成员变量m_ofn,它是OPENFILENAME类型的结

构。通常,要使用一个F ileDialog对象,需要首先用CFileDialog的构

造函数创建该对象。在对话框被构造之后,且在用DoModal成员函数显

示对话框之前,应用程序可以通过设置m_ofn结构中的值,来对此对话

框中的控件的值或状态进行初始化。例如:应用程序可将m_ofn的lpsz Title成员设置为所想要的对话框标题;可将m_ofn的指定该对话框的

创建标志Flags成员设置为其各标志位值的多种组合,以达到一定要求

,其中,设置的Flags中的OFN—ALLOWMULTISELECT标志可允许用户选择

多个文件;设置OFN_HIDEREADONLY标志可隐藏Read Only检查框;设置O FN_OVERWRITEPROMT标志可做到若所选择的文件已存在,则使Save As

对话框产生一个消息框,使用户确认是否重写该文件;等等。有关此结

构的详细说明,包括它的成员列表,参看Windows SDK文档中OPENILE N AME的介绍。

从以上所述看,仅改变m_ofn的值只能做到简单的定制,若要对通

用对话框的外观、通用对话框已有控件进行进一步调整(功能改变或

删除),以及给通用对话框增加新的控制,则以上简单定制方法是做不

到的。笔者将为大家提供一种方法,下面以一例子来介绍。

本例假定一应用程序要读入某一位图文件,要求对要读入的位图

文件进行预览,具体实现是在File Open通用对话框的基础上增加预显

功能,即每当选中一个位图文件时,就在对话框中显示此文件的位图。

为节省编程工作量,可对Windows提供的File Open通用对话框进行定

制。本例定制对话框采取的方案是直接使用CFileDialog类,设法获取

标准通用对话框资源并对其进行修改,然后编写File Open菜单命令处

理程序和一个钩子函数(HOOK)来处理特殊要求。本例在VC++4.0环境

中创建一个DibPreView项目来实现。

1.获取并改造通用对话框资源

在使用VC++自动创建的应用程序中,系统菜单File项中的Open项

的处理是调用了系统由CommDll.DLL提供的标准File Open对话框,要

实现对其定制就必须截获Open项的命令,用自己的代码来处理,以替代

系统提供的缺省处理。要做到这点并不困难,只要用ClassWizard在合

适的对象(比如文档类或视窗类等)中增加对ID_FILE-OPEN控制的处理

,即增加OnFileOpen函数,编写此函数就能实现对Open命令的处理。在此函数中首先要创建一个CFileDialog类的对象,该对象的外观和行为

均同标准的File Open对话框相同,要改变该对象的外形或删除原对话

框中的某些控件或增加某些控件,都必须首先设法获取该对象所对应

的标准资源,然后,对其进行相应的修改。获取资源的方法有两种:

方法一:

在Msdev/Include目录中存有以上几个标准通用对话框的资源,以FileOpen.Dlg、 FotDlg、FindText.Dlg、Color.Dlg和PrnSetup.Dl

g文件方式存在,这些文件其中的一些常量被定义在本目录中的dlgs.h 中。为了定制该对话框,就要以显式方式引用这些资源,要将它们嵌入

到本应用程序的资源中,然后再修改该对话框的资源。具体步骤如下:

(1)用VC++4.0自动创建项目DibPreView的全部文件;

(2)以Text方式打开本项目中的资源文件DibPreView.rc,在此文

件中的Dialog段首行前加上语句:

#include

(3)将Afxres.h文件从Msdev/Mfc/Include目录中复制到本项目目

录中,并打开新复制的Afxres.h文件,将下面的语句添加到文件行首: #include

方法二:

在VC++安装盘中的Msdev\Sample\Mfc\General\Clipart目录中存

有资源文件Commdlg.c ,此文件含有Color、File、Open(或Save As) 、Find、Font、Print、Print Setup、Replce 几个通用对话框的资

源,为了以显式方式引用这些资源,可利用VC++的资源编辑器,将所需

的通用对话框资源复制到本例项目资源文件中。

按以上两方法处理完后,在本项目的资源目录列表中的Dialog项

中,出现一标识符为FIE OPENORD的对话框资源,然后利用资源编辑器

对此标准File Open对话框(即FILEOPENORD标识的)进行改造。主要是在原对话框中增加一大的自画Button,为预显位图之用,定义ID号为I_ view,如下图:

标准的File Open对话框:

图1

定制过的File Open对话框:

图2

注:变动如下:

(1)边框加长;

(2)删除"read only"项;

(3)移动"OK"、"Cancel"、"Help"按钮;

(4)增加一大自画按钮button1。

2.编写处理代码

VC++自动生成的程序框架已为Open命令提供了缺省的处理函数,

为定制该对话框就需重写Open命令的处理函数。用ClassWizard在文

档类中添加一个菜单处理函数OnOpenFile(),具体程序如下: voidCDibPreViewDoc::OnFileOpen()

{

//TODO:Add your command handler code here

charFileNameString[]="*.dib";

charFilterString[]="DIB file(*.dib)|*.dib|BMP file(*.bm

p)|*.bmp|Allfile(. *)|*.*||";

CFileDialogFileDialog(TRUE,NULL,(LPSTR)FileNameString,O

FN--HIDEREAD|OFN-OE RWRITEPROMPT,(LPSTR)FilterString); FileDialog.m-ofn.Flags=OFN—SHOWHELP|OFN—ENABLEHOOK|OFN —HIDEREADONLY|OFN—ENABLETEMPLATE;

FileDialog.m-ofn.lpfnHook=(LPOFNHOOKPROC)MakeProcInstanc

e(FileOpenHookProcN ULL);

FileDialog.m—ofn.lpTemplateName=(LPSTR)MAKEINTRESOURCE( FILEOPENORD);

if(FileDialog.DoModal()==IDOK)

}

……

}

}

另外,为了定制CFileDialog的行为,我们定义一个钩子函数FileO penHookProc()来截获发给CFileDialog的全部消息,并对其进行筛选, 选取自己需要进行处理。对自己不处理的消息或自己处理完后仍要交

给MFC处理的消息,钩子函数返回FALSE;对自己处理完后而不需要F C 处理的消息,钩子函数返回TRUE。由于篇幅所限,仅提供本例程序框架。BOOL CALLBACK FileOpenHookProc(

HWND hDlg,

/*window handle of the dialog box*/

UINT message, /*type of message */

WPARAM wParam, /*message_specific information */

LPARAM lParam)

{

switch(message)

{

case WM—INITDIALOG:

//初始化工作

……

break;

case WM—COMMAND:

//判断是否为文件列表框中选择结果发生改变时发出的消息

if(LOWORD(wParam)==lstl&&HIWORD(wParam)==LBN—SELCHA NGE)

/* lstl是文件列表框的ID号*/

{

//获取列表框现行的选中项的序号

intnItem=SendDlgItemMessage(hDlg,lst1,LB—GETCURSEL,(WP ARAM) 0,(LPARAM) 0

//获取列表框现行的选中项的字符串的长度

inttmpLength=SendDlgItemMessage(hDlg,ist1,LB—GETTEXTLE N,(WPARAM) nItem,(P ARAM) 0);

//获取列表框现行的选中项的字符串

::SendDlgItemMessage(hDlg,lst1,LB—GETTEXT,(WPARAM) nI tem,(LPARAM) &Filea me);

FileName[tmpLength]=0;

//获取增加的Button的窗口句柄

HWND staticItem=::GetDlgItem(hDlg,IDC—view);

if(!staticItem)

MessaageBox(hDlg,"Can not find HWND","Error",MB-OK);

//要求刷新增加的Button的窗口

::InvalidateRect(staticItem,NULL,TRUE);

::UpdateWindow(staticItem);

}

break;

case WM—DRAWITEM:

LPDRAWITEMSTRUC lpdis=(LPDRAWI TEMSTRUCT) lParam;

HDC hdcMem=lpdis—>hDC;

//判断是否为要求刷新buttonl窗口而发出的消息

if(wParam==IDC_view)

//IDC_view是新增加的buttonl的ID号

{

//刷新增加的Buttonl窗口(在buttonl上显示位图)

……

}

break;

}

return(FALSE);

}

VC 中自己创建对话框方法

VC中自己创建对话框的方法 这里讲在VC中不需要打开MFC工程,通过代码直接创建一个对话框,我看这个对话框比MFC的漂亮多了,而且要写会代码不需要研究MFC就直接开发新的工程. 先打开VC++ 6.0 版本, 第一步:创建一个工程名为:Main Dialog 的Win32 Application。创建过程如下: 打开File菜单中New,选自Win32 Application,工程名为:Main Dialog,点击OK,再选自A simple Win32 application。点击Finish,再点击OK.(见图1) 第二步:创建资源脚本。再打开File菜单中New,选自File选项的Resource Script(就是资源脚本),文件名为Dialog,点击OK。

(见图2) 第三步:插入对话框。刚才建立的脚本Dialog显示为Dialog.rc,就在Dialog.rc上面点击鼠标右键Insert(插入)Resource中选自插入Dialog(对话框),点击New(新建),这样对话框插入完毕。(见图3)

第四步:添加resource.h。我们把第四步插入的对话框ID改为IDD_MAIN ,在FileView中有个Header Files的文件,上面点击右键,选择Add Files to Folder...(添加文件到目录),弹出一个工程目录窗口,中间找到resource.h,然后OK了(添加)。(见图4)

第五步:复制代码。双击Main Dialog.cpp,我们写代码的位置出现了(见图5),那里有几行代码,把它们全部删掉,下面已经准备好的代码全部复制到那里,编译,执行,您的是否成功了? #include "stdafx.h" #include "resource.h" #include BOOL WINAPI Main_Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); BOOL Main_OnInitDialog(HWND hwnd,HWND hwndFocus,LPARAM lParam); void Main_OnCommand(HWND hwnd,int id,HWND hwndCtl,

6.7 Windows通用对话框

任务六对话框应用程序设计 6.7 Windows通用对话框 Windows通用对话框是由操作系统提供的任何应用程序都可以获得的对话框。在VC++中,对这些对话框进行了封装,使用户在开发程序时可以方便的调用这些对话框。 6.7.1 使用“文件”对话框打开和保存文件 主程序名:FileDialog 1、添加两个按钮控件,一个编辑框控件,两个静态文本控件

2、为控件关联变量 3、编辑“打开”按钮,编辑程序 void CFileDialogDlg::OnOpen() { // TODO: Add your control notification handler code here CFileDialog

dlg(TRUE,NULL,NULL,OFN_HIDEREADONL Y|OFN_OVERWRITEPROMPT, "All Files(*.TXT)|*.TXT||",AfxGetMainWnd()); CString strPath,strText=""; if(dlg.DoModal() == IDOK) { strPath = dlg.GetPathName(); m_OpenPath.SetWindowText(strPath); CFile file(strPath,CFile::modeRead); char read[10000]; file.Read(read,10000); for(int i=0;i

第六章 对话框控件

学习目标: ?掌握CommonDialog。 ?掌握文件操作相关的对话框。 ?理解打印对话框。 6.1对话框: 对话框是一种用户界面接口,用于同用户进行交互,完成一些特定的任务,简单的对话框有对用户操作进行提示的对话框,对重要操作要求用户进行决定的交互对话框等。 这类任务能被独立出来,作为通用的交互处理过程。这些能被独立出来作为通用交互过程的任务常见如下一些: (1)文件选取。 (2)保存设置。 (3)路径选取。 (4)字体选取。 (5)颜色选取。 (6)打印设置。 (7)打印预览框。 在.NET中这些组件是在https://www.wendangku.net/doc/704386405.html,monDialog的基础上发展而来。

6.1.1Common pialog: CommonDialog是.NET中对话框组件的基础,它是System.Windows.Forms命名空间下的一个抽象类,在程序中不能直接使用。 CommonDialog公开了2个方法和一个属性,即:ShowDialog()/ShowDialog(IWin32Window)方法和Reset()方法以及Tag属性。 ShowDialog是用于显示对话框。ShowDialog()有一个重载形式:ShowDialog(IWin32Window),IWin32Window在这里指一个窗口句柄,在调用中,这个参数应该被赋值成要显示的对话框的父窗体。 注意:句柄是Window中的一个常用词语,可以把它理解为一个标识符号,只是这个标识符号是一个数字。相应的窗口句柄就是窗口的标标识符。 Reset方法: 使用过程中可能改变初始值,当需要让所有的初值回到原来的状态时,调用Reset能达到目的。 Tag属性: Tag没有具体含义,它可以让用户在对话框控件中存储、维护自己的数据。这个数据由用户自己的代码解释。 对话框的返回值(ShowDialog的返回值): 对话框通过调用ShowDialog()调用后,返回一个类型为DialogResult 值,其中DialogResult.OK指出用户成功完成了操作,成功选取了文

在CFileDialog对话框中添加控件

在CFileDialog对话框中添加控件 关键字:CFileDialog扩展类,OFNHookProc 需求描述:昨天遇到一个用户需求,在CFileDialog对话框(SAVE)中加入一个Check , 一个Edit,一个Spin控件,dlg.Domodal()==IDOK返回时要同时获得Edit控件中的数据. 实现方法:如果只需要控制控件,用方法一即可,但如果需要获取数据,则只能用方法二。我最终用的就是方法二. 方法一: 首先查找MSDN关于CFileDialog扩展的实现描述,上网查到实现预览图片式的CFILEDIALOG的例子。按照其思路从CFileDialog派生了一个新的类CFileDialogEX. 在类中添加以下代码 #define WM_CHECKZOOMIN WM_USER+1856 public: BOOL bZoomIn; UINT nMul; //[1~100] //前置声明--------------- BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn); UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); // CFileDialogEx IMPLEMENT_DYNAMIC(CFileDialogEx, CFileDialog) CFileDialogEx::CFileDialogEx(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) : CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd) { //这个四个常用标识位 m_ofn.Flags |= OFN_ENABLETEMPLATE |OFN_HIDEREADONLY |OFN_EXPLORER; //OFN_EXPLORER | OFN_ENABLEHOOK

VC对话框控件属性的修改

【作者按】本文主要针对初学者在使用对话框赋值时的一些问题而写。如果你对对话框的使用已经很熟练,请跳过本文。 【针对现象】许多初学者,常常写出这样的程序来修改对话框中某个按钮的标题: 其中m_Btn的定义为CButton m_Btn; 这段程序运行后会报错,debug一下,错误会指向一个断言语句 ASSERT(::IsWindow(m_hWnd));报告窗口指针为空。看一下m_hWnd,等于0x00000000.其实就是m_Btn这个CButton对象的句柄为空。 【原因分析】出现这种错误的原因,显然是m_Btn这个窗口对象还没有创建造成的。我们看一下CMyDialog dlg这个构造函数,看一看MSDN对CDialog构造函数的说明。其实它只是简单的创建了一个对话框实例。这里我这样理解,就是对话框是一个容器,而对话框上的各个控件是容器中包含的对象。对话框的构造函数只是构造了一个容器,而并没有创建容器中的各个对象。我想这里大家就应该明白为什么m_Btn的句柄为空了。 那对话框中的控件在什么时候被创建的呢?我个人没有仔细的研究过,但从个人使用的经验看,应该在DoModal函数和对话框的Create函数中创建的。因为使用一个模式对话框时,m_Btn.SetWindowText("MyButton")语句在OnInitDialog函数中执行没有问题。所以应该在DoModal中创建的。至于DoModal中是如何创建的,欢迎各位高手给与讲解。而对于非模式对话框,以下的程序运行没有问题: 可见控件的创建应该在Create函数中。

[解决办法]那么,如果非要实现这样的功能怎么办呢?笔者的解决办法是在对话框类中增加成员变量,比如m_sBtnTitle。数据的传递有以下三种方法: 1。增加Set函数,比如SetBtnTitle(CString str); 调用程序如下: 2。将m_sBtnTitle定义成公有类型。 那么dlg.m_sBtnTitle = "MyButton";就可以了。 3。修改或者重载一个新的构造函数,比如: 最后,在对话框类的初始化函数增加m_Btn.SetWindowText(m_sBtnTitle);即可。 还有一些网友提供的方法是定义全局变量。当然,首先肯定全局变量是可以完成此功能的。不过笔者并不赞同用全局变量的方法。对于面向对象的编程和设计来说,全局变量应该尽量少使用,因为全局变量将增加模块之间的耦合度,与面向对象的思想是有违背的。正如goto 语句,好用但尽量少用。在这里笔者并不是反对用全局变量,而是要看情况而用。笔者曾经开发过一个日本项目,粗略计算一下,全局变量不下于1000个,这样的程序的维护难度可想而知。 希望此文能够帮助初学者在VC之路上少走一些歪路,尽快融入VC开发大军。

VC++对话框添加工具栏

VC++对话框添加工具栏 1、添加工具栏资源ID为IDR_TOOLBAR 2、在对话框的类定义中加: CToolBar m_ToolBar; 3、在OnInitDialog中或其它合适的消息响应中加如下代码:(函数可查看MSDN) m_ToolBar.Create(this); //创建工具栏 m_ToolBar.LoadToolBar(IDR_TOOLBAR);//加载工具栏 //得出控件条大小. CRect rect; CRect rectNow; GetClientRect(rect); RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rect Now); //放置控件条位置 CPoint ptOffset(rectNow.left-rect.left,rectNow.top-rect.top); CRect rcChild; CWnd* pwndChild=GetWindow(GW_CHILD); while (pwndChild) { pwndChild->GetWindowRect(rcChild); ScreenToClient(rcChild); rcChild.OffsetRect(ptOffset); pwndChild->MoveWindow(rcChild,FALSE); pwndChild=pwndChild->GetNextWindow(); } //调整对话框尺寸 CRect rcWindow; GetWindowRect(rcWindow); rcWindow.right+=rect.Width()-rectNow.Width(); rcWindow.bottom+=rect.Height()-rectNow.Height(); MoveWindow(rcWindow, FALSE);

MFC对话框程序中的各组件常用方法

MFC对话框程序中的各组件常用方法: Static Text: 将ID号改成唯一的一个,如:IDC_XX,然后进一次类向导点确定产生这个ID,之后更改Caption属性: GetDlgItem(IDC_XX)->SetWindowText(L"dsgdhfgdffd"); 设置字体: CFont *pFont = new CFont; pFont->CreatePointFont(120,_T("华文行楷")); GetDlgItem(IDC_XX)->SetFont(pFont); Edit Control: 设置文本: SetDlgItemText(IDC_XX,L"iuewurebfdjf"); 获取所有输入: 建立类向导创建一个成员变量(假设是shuru1,shuru2……)类型选value,变量类型任选。 UpdateData(true); GetDlgItem(IDC_XX)->SetWindowText(shuru1); 第一句更新所有建立了变量的对话框组件,获取输入的值。第二句将前面的IDC_XX的静态文本内容改为shuru1输入的内容。 若类型选用control: 1.设置只读属性: shuru1.SetReadOnly(true); 2.判断edit中光标状态并得到选中内容(richedit同样适用) int nStart, nEnd; CString strTemp; shuru1.GetSel(nStart, nEnd); if(nStart == nEnd) { strTemp.Format(_T(" 光标在%d" ), nStart); AfxMessageBox(strTemp); } else { //得到edit选中的内容 shuru1.GetWindowText(strTemp); strTemp = strTemp.Mid(nStart,nEnd-nStart); AfxMessageBox(strTemp); } 其中nStart和nEnd分别表示光标的起始和终止位置,从0开始。strTemp.Format 方法用于格式化字符串。AfxMessageBox(strTemp)显示一个提示对话框,其内容是字符串strTemp。 strTemp = strTemp.Mid(nStart,nEnd-nStart)返回一个被截取的字符串,从nStart开始,长度为nEnd-nStart。如果nStart == nEnd说明没有选择文本。 注:SetSel(0,-1)表示全选;SetSel(-1,i)表示删除所选。

VC++实现对话框工程中添加菜单

VC++对话框程序中添加菜单 在VC中创建一个基于对话框的MFC程序,要在其中添加菜单总共分三步: 1、首先插入一个菜单资源IDR_MENU1,然后可以编辑修改菜单; 2、然后在为对话框添加一个CMenu类型的成员变量m_Menu; 3、在OnInitDialog()中添加如下的代码: m_Menu.LoadMenu(IDR_MENU1);//载入菜单 SetMenu(&m_Menu); //显示菜单 经过这三步以后菜单就可以显示出来了。 MFC 对话框工程中添加菜单(VC++ 6.0编译器) MFC 对话框工程中添加菜单(VC++ 6.0编译器) 第一步:创建对话框资源和菜单资源. 第二步:添加菜单到对话框中 方法一: 在创建的对话框中右键,在Menu选项选择自己的菜单ID如下图

此时就可以了. 方法二: 不用方法一,直接添加代码完成上述功能. 添加代码到DialogDlg ::OnInitDialog中 CMenu *menu = new CMenu; menu ->LoadMenu(MAKEINTRESOURCE(IDR_MENU)); //IDR_MENU 菜单ID this ->SetMenu(menu); 或者 Cmenu m_menu; m_menu.LoadMenu(IDR_MENU); SetMenu(&m_menu); 此时结果如下图 最后在添加菜单到对话框类中,实现其各种功能. 下面是在上面的基础上实现的通用对话框空间的功能代码,方便以后开发使用. (1)打开文件对话框 条件: OPENFILENAME结构体初始化 GetOpenFileName函数调用

VC中对话框使用技巧集合

注:以下代码以一个名为CTest6Dlg的对话框类为例 -------------------------------------------------------------------------------- 1. 在任务栏隐藏对话框 ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); -------------------------------------------------------------------------------- 2. 使对话框为顶层窗口 SetWindowPos(&this->wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); -------------------------------------------------------------------------------- 3. 在运行时添加最大化,最小化按钮 SetWindowLong(this->m_hWnd, GWL_ST YLE, GetWindowLong(this->m_hWnd, GWL_ST YLE) | WS_MINIM IZEBOX | WS_MAXIMIZEBOX); UpdateWindow(); -------------------------------------------------------------------------------- 4. 使能对话框右上角关闭按钮 在OnInitDialog中 方法一: CMenu* menu = GetSystemMenu(FALSE); menu->Modify M enu(SC_CLOSE, MF_BYCOMMAND | M F_GRAYED ); 方法二: CMenu* menu = GetSystemMenu(FALSE); menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED); -------------------------------------------------------------------------------- 5. 当对话框一部分在屏幕外时,显示全部对话框 SendMessage(DM_REPOSITION); -------------------------------------------------------------------------------- 6. 改变鼠标外形 添加WM_SETCURSOR 消息映射函数 BOOL CTest6Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { SetCursor(AfxGetApp()->LoadStandardCursor(IDC_HELP)); return 0; } -------------------------------------------------------------------------------- 7. 改变对话框背景色和文本颜色 在CTest6App的InitInstance中添加

vb通用对话框

CommonDialog 控件提供一组标准的操作对话框,进行诸如打开和保存文件,设置打印选项,以及选择颜色和字体等操作。通过运行Windows 帮助引擎控件还能显示帮助。 CommonDialog 控件在Visual Basic 和Microsoft Windows 动态连接库Commdlg.dll 例程之间提供了接口。为了用该控件创建对话框,必须要求Commdlg.dll 在Microsoft Windows \System 目录下。 为了在应用程序中使用CommonDialog 控件,应将其添加到窗体上并设置属性。控件显示的对话由控件的方法决定。运行时,调用相应方法后将显示对话框或执行帮助引擎;设计时在窗体上将CommonDialog 控件显示成一个图标。此图标的大小不能改变。 CommonDialog 控件可以显示如下常用对话框: “打开” “另存为” “颜色” “字体” “打印” 注意无法指定对话框显示在什么地方。 要使用CommonDialog 控件 若未添加CommonDialog 控件,则应从“工程”菜单中选定“部件”,将控件添加到工具箱中。在标记对话的“控件”中找到并选定控件,然后单击“确定”按钮。 单击工具箱中的“CommonDialog”控件并在窗体上绘制该控件。 在窗体上绘制CommonDialog 控件时,控件将自动调整大小。象Timer 控件一样,CommonDialog 控件在运行时不可见。 运行时,请适当使用下表所列方法显示需要的对话。方法显示的对话 ShowOpen 打开 ShowSave 另存为 ShowColor 颜色 ShowFont 字体 ShowPrinter 打印 ShowHelp 调用Windo ws“帮助” 示例代码: 下例显示“打开”对话框然后在信息框中显示所选的文件名: Private Sub Command1_Click()

VC++对话框中使用表格控件的方法

在对话框中使用表格控件的方法: 将该控件改成“report”类型,方法如下。 首先打开该控件的属性,将其设置为“Report”类型,如下图所示。

改完后变为如下形式,是变成了一个列表框。 下面说一下如何通过代码向控件中填加内容,主要是设置表头,然后加入内容,至少有两种方法可以进行信息的加入,下面仅介绍一种。 首先向与对话框对应的类中加入一个与ListControl控件对应的成员函数。填加方法如下:

运行“ClassWizard”定义一个类的ListCtrl控件成员,填加界面如下,其中IDC_LIST1是上面填加的表格控件的ID 。 选中“Member Variables”标签,点击“Add Variable”出现如下对话框,添加变量名,添加后,就会在与对话框对应的类中加如m_List变量,类型为CListCtrl。

在程序中加入如下代码,实现在表格中显示信息: m_List.InsertColumn(0,"Col 1",LVCFMT_LEFT,80,0); //设置列 m_List.InsertColumn(1,"Col 2",LVCFMT_LEFT,80,1); m_List.InsertColumn(2,"Col 3",LVCFMT_LEFT,80,2); m_List.InsertItem(0,"Item 1_1"); //插入行 m_List.SetItemText(0,1,"Item 1_2"); //设置该行的不同列的显示字符m_List.SetItemText(0,2,"Item 1_3"); 运行上面几行代码后的效果如下图所示。

VC 对话框自带滚动条的使用

VC对话框自带滚动条的使用 一,使用对话框窗口自带的滚动条,在属性页面中设置即可,如下 二,OnInitDialog()函数中,添加如下滚动条初始化语句 SCROLLINFO vinfo; vinfo.cbSize =sizeof(vinfo); vinfo.fMask =SIF_ALL; vinfo.nPage =50;//滚动块自身的长短,通常有如下关系:其长度/滚动条长度(含两个箭头)=nPage/(nMax+2),//另外nPage取值-1时,滚动条会不见了。 vinfo.nMax =600;//滚动条所能滚动的最大值 vinfo.nMin=0;//滚动条所能滚动的最小值 vinfo.nTrackPos =0; SetScrollInfo(SB_VERT,&vinfo);//即使上述步骤一不做,使用此条语句也可以显示滚动条 三,添加相应的WM_VSCROLL函数

void CMy1d0Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default SCROLLINFO scrollinfo; GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); switch (nSBCode) { case SB_BOTTOM: //滑块滚动到最底部 ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10); //滚动屏幕 scrollinfo.nPos = scrollinfo.nMax; //设定滑块新位置 SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); //更新滑块位置 break; case SB_TOP: //滑块滚动到最顶部 ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*10); scrollinfo.nPos = scrollinfo.nMin; SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); break; case SB_LINEUP: //单击上箭头 scrollinfo.nPos -= 1; if (scrollinfo.nPosscrollinfo.nMax) { scrollinfo.nPos = scrollinfo.nMax; break; } SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); ScrollWindow(0,-10); break; case SB_PAGEUP: //单击滑块上方空白区域 scrollinfo.nPos -= 5; if (scrollinfo.nPos

【精品报告】常用中后台交互设计控件使用场景与规范总结

常用中后台交互设计控件使用场景与规范总结 最近刚完成平台安畅云 2.0 的改版设计,平台模块很多,经常存在很多类似的页面和组件,若不制定统一的规范和控件,则会导致很多重复的工作,大大降低产品的设计效率; 同时,平台的一致性也得不到保障。 所以,我们视觉、交互、前端的小伙伴们针对我们踩过的坑,大家认真总结和提炼出一个 符合公司定位的设计规范,统一公司项目的前端 UI 设计,规避不必要的设计差异和实现 成本,实现设计和前端资源的效率最大化。 此设计规范主要分享了中后台常用设计组件的定义、组成、使用场景及注意事项。 字体 概述 字体是界面设计中最基本的构成元素之一,用户通过文字来理解内容和完成任务,合适的 字体将大大提升用户的阅读体验及工作效率。在安畅云项目的字体使用中,为了使页面的 视觉层次更加清晰,我们从以下三方面来使平台的字体符合易阅读和美观的要求。 合理的使用不同的字重、字号和颜色来强调界面中需要突出的信息; 尽量使用单种字体,使用多种字体会让界面看起来零散和杂乱无章; 遵循 WCAG 2.0 标准(标准详情见 https://https://www.wendangku.net/doc/704386405.html,/Translations/WCAG20- zh/#visual-audio-contrast),字体在使用时与背景颜色的对比值满足无障碍阅读的最 低标准。 字体使用建议 中文字体优先级:PingFang SC、Hiragino Sans GB 、Microsoft YaHei(平台使用字体)英文字体优先级:Helvetica Neue、Helvetica、Arial(平台使用字体)

字号使用建议 行高使用建议 行高也是影响用户阅读体验的重要因素之一,我们查阅资料得知西文的基本行高通常是字号的 1.2em 左右,而中文因为字符复杂,所以中文行高需要更大。现在公认1.5em 至1.8em 之间会有一个比较好的视觉阅读效果。 安畅云项目行高计算公式:行高值=字号 x 1.5,例如:12 号字体的行高为 18px,14 号字体的行高为 21px。

VC改变对话框按钮字体颜色和背景的解决方案

要想修改CButton类按钮背景颜色和文字颜色,必须利用自绘方法对按钮进行重新绘制。这可以通过定义一个以CButton为基类的新按钮类来实现。以下为具体的实现方法: 方法一: 加入一个新类,类名:CMyButton,基类:CButton。 在头文件MyButton.h 中加入以下变量和函数定义: private: int m_Style; //按钮形状(0-正常,1-当前,2-按下,3-锁定) BOOL b_InRect; //鼠标进入标志 CString m_strText; //按钮文字 COLORREF m_ForeColor; //文本颜色 COLORREF m_BackColor; //背景色 COLORREF m_LockForeColor; //锁定按钮的文字颜色 CRect m_ButRect; //按钮尺寸 CFont* p_Font; //字体 void DrawButton(CDC *pDC); //画正常的按钮 // 接口函数 public: void SetText(CString str); void SetForeColor(COLORREF color); //设置文本颜色 void SetBkColor(COLORREF color); //设置背景颜色 void SetTextFont(int FontHight,LPCTSTR FontName); //设置字体 在MyButton.cpp 的构造函数中初始化变量: CMyButton::CMyButton() { m_Style = 0; //按钮形状风格 b_InRect = false; //鼠标进入标志 m_strText = _T(""); //按钮文字(使用默认文字) m_ForeColor = RGB(0,0,0); //文字颜色(黑色) m_BackColor = RGB(243,243,243); //背景色(灰白色) m_LockForeColor = GetSysColor(COLOR_GRAYTEXT); //锁定按钮的文字颜色p_Font = NULL; //字体指针 } 用ClassWizard添加下列消息函数: PreSubclassWindow(); DrawItem(); onMouse Move(); OnLButtonDown(); OnLButtonUp(); 在各函数内加入代码: void CMyButton::PreSubclassWindow() { ModifyStyle( 0, BS_OWNERDRAW ); //设置按钮属性为自画式 CButton::PreSubclassWindow();

4 对话框及常用控件 (第四章 对话框和常用控件)

1.什么是对话框?它分为哪两类?这两类对话框有哪些不同? 答:对话框是一种特殊的窗口,主要功能是输出信息和接收用户的输入。对话框分为有模式对话框和无模式对话框。当一个有模式对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。而无模式对话框打开时,用户可以同时打开其他窗口对象,操作完毕后,又可用鼠标或其他方式激活该窗口。 2.什么是对话框模板、对话框资源和对话框类? 答:对话框模板是一个描述对话框的内存结构,用于添加控件及其布局。对话框资源指快捷键、对话框、菜单、字符串、工具栏按钮、图表、版本信息等。对话框类用于实现对话框功能。 3.对一个对话框编程一般经过几个步骤? 答:1. 在资源编辑器中画对话框,添加控件,设定控件位置、大小、ID和其它属性; 2. 定义对话框回调函数,添加控件的事件处理函数; 3. 注册对话框函数 4、什么是控件?根据控件的性质可以将控件分为几类? 答:在Windows中所用的按钮控件是用来实现一种开与关的输入。 常见按钮类型:按键按钮、单选按钮、复选框按钮。 5.向对话框添加一个常用控件的方法有哪些?这些方法是否使用于ActiveX控件? 答:1、先点击控件,然后在对话框上单击, 2、先点击控件,然后在对话框上点住不放,画出像要的大小。 否。 6.什么是DDV/DDX技术?如何使用这种技术? 答:DDX(对话框数据交换)机制用来初始化对话框中的数据,并向应用程序返回数据,它使得用户向对话框加载对象数据和当对话框关闭时恢复其中的数据这两个过程自动化。 DDV(对话框数据验证有效性)机制用于将数据返回成员变量之前将数据的长度和范围有效化。 7.什么是空间的通知消息?它在编程中起哪些作用? 答:控件消息由按钮(BN_)、编辑框(EN_)、组合框(CBN_)和列表框(LBN_)等产生。控件通过向父窗口发送控件通知消息来表明发生了某种事件。

VC设置对话框背景

VC设置对话框背景 少将2014-11-20 VC对话框默认的灰度背景实在是不美观,填充背景图成了改善用户界面的一个很好的选择。 首先在资源视图中添加一个位图资源,如命名为IDB_BMPBK。 在对话框中添加OnEraseBkgnd()事件处理函数,用于擦除背景进行重绘。其中添加的代码如下: BOOL DialogClass::OnEraseBkgnd(CDC* pDC) { //创建内存DC CDC MemDC; //CBitmap对象 CBitmap Bitmap,*pOldBitmap; //BITMAP句柄 BITMAP bm; //加载位图 Bitmap.LoadBitmap(IDB_BMPBK); //将位图资源与句柄绑定 Bitmap.GetObject(sizeof(BITMAP),&bm); //创建与内存兼容的DC MemDC.CreateCompatibleDC(pDC); //替换原位图 pOldBitmap=(CBitmap*)(MemDC.SelectObject(&Bitmap)); //获取绘制的区域 CRect rcClient; GetClientRect(&rcClient); //绘制到客户区 pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),&MemDC,0,0,SRCCOPY); MemDC.SelectObject(pOldBitmap); MemDC.DeleteDC(); return TRUE; } 默认生成的OnEraseBkgnd()处理函数会有调用基类的处理函数然后再返回结果,要注意把这一句直接删除,然后直接返 TRUE。

VC++自定义控件的建立及使用方法

VC++自定义控件的建立及使用方法 本文来自: https://www.wendangku.net/doc/704386405.html, 详细来源请参考:https://www.wendangku.net/doc/704386405.html,/techntxt/201298191132524755545 VC++自定义控件的建立及使用方法来源:https://www.wendangku.net/doc/704386405.html,/ 发布日期:2012-09-08 点击次数:168 发布者IP:218.25.20.78 VC++自定义控件的使用方法 一、VC++定义自定义控件与delphi,VB有些差异。delphi,vb在file-new-other中建立。vc++在工具栏中就有 自定义控件,但必须加入控件类型。许多书籍都在类向导中建立。我这里介绍的是手动建立,其结果是一样的 。 二.建立过自定义控件类型: 2.1、把工具栏上的自定义控件放入对话框中 2.2、建立Mycontrol.h, Mycontrol.cpp文件 2.3、Mycontrol.h中的定义是 #ifndef __MYCTROLTRL_H__ #define __MYCTROLTRL_H__ #define MYWNDCLASS "mycontrol" #include class CMycontrol: public CWnd { private: public: static BOOL RegisterWndClass(); CMycontrol(); void customfun();//一个自定义方法 }; #endif 2.4 Mycontrol.cpp中的实现部分 #include "StdAfx.h" #include "mycontrol.h" CMycontrol::CMycontrol() { CMycontrol::RegisterWndClass(); } //注册控件RegisterWndClass格式是固定的不要记忆没有那个必要直接拷贝粘贴就可以。 CMycontrol::RegisterWndClass() {

vb文件菜单通用对话框

第7章第10章 一、内部文件控件 二、通用对话框 三、文件的读写操作 四、菜单编辑器

一、内部文件控件 文件系统控件用来查看和选择文件的功能,这类控件有两种: ①VB内部标准的文件控件: 驱动器列表框(DriveListBox) 目录列表框(DirListBox) 文件列表框(FileListBox) ②另一种是Windows的通用对话框控件(CommonDialog),该控件是ActiveX控件,需要加载后才能使用。

驱动器 列表框 文件列表框 目 录 列 表 框

1.驱动器列表框(DriveListBox) ①功能:用来显示当前机器上的所有盘符。 ②Drive属性:设置或显示运行时选择的驱动器。 如:Drive1.Drive = “C”或 Drive1.Drive = “C:”或 Drive1.Drive = "C:\“均正确。 ③Change事件:选择一个新的驱动器或通过程 序代码改变Drive属性的设置时,都将引发驱动器列表框的Change事件发生。

【例1】窗体中有2个标签和1个驱动器列表框。程序运行时,将用户在驱动器列表框中所选驱动器名称显示在窗体的标签中。 Private Sub Form_Load() Label2.Caption = "选中的驱动器是" & Drive1.Drive End Sub Private Sub Drive1_Change() Label2.Caption = "选中的驱动器是" & Drive1.Drive End Sub 例1

2.目录列表框(DirListBox) ①功能:以根目录开始, 显示目录的层次结构。 ②Path属性:设置当前路径,只能在程序代码中设置。格式为目录列表框名称.Path[=“路径”]如:Dir1.Path=“c:\Windows” ③Change事件:在目录框发生变化时,会触发该事件。 【例2】窗体中有1个驱动器列表框、1个目录列表框和4个标签。程序运行时,将用户在驱动器列表框中所选驱动器的所有目录显示在目录列表框中,并将用户双击时所选中的目录显示在窗体下部的标签中。

通用对话框与文件操作

第10讲通用对话框与文件操作 教学目标 1.掌握文本文件的读取与写入操作 2.掌握通用对话框的使用 重点、难点: 1.通用对话框的使用;(重) 2.数据的读写。(难) 提纲: 1.复习与作业点评 2.文件的读、写操作 3.消息框的使用MessageBox 4.通用对话框的使用OpenFileDialog、SaveFileDialog、FontDialog、ColorDialog 5.小结 6.作业 一、复习与作业点评 二、文件的读、写操作(幻灯片18~26) (一)流 流(Stream)是字节序列,对于流的操作是按照流中字节的先后顺序来进行的。提供一种向存储器写入数据和从存储器读取数据的方法。在读写文件时,不是直接操作文件,而是通过文件流的某些方法来实现文件的读写。流就好像是在计算机的输入/输出之间建立的一条通道,数据好像在这其中“流”动一样。 文件是静态的,流是动态的。要想访问文件,就要建立流对象(Stream)。 (二)读取文件 要从文本文件中读取数据,首先要使用System.IO.StreamReader类建立一个StreamReader对象:Dim 对象名称As New System.IO.StreamReader(路径和文件名,编码方式) 其次用StreamReader对象读取数据常用的方法来读取数据。 读取内容=对象名称.读取方法 StreamReader对象的常用的读取方法有: Read()方法:读取当前流中的下一个字符或下一组字符。 Readline()方法:从当前流中读取一行数据,并将数据作为字符串返回。

ReadtoEnd()方法:由文件当前位置开始读取数据,直到文件结束。 最后需调用close方法关闭StreamReader对象。 对象名称.Close 在文本框1中输入想要打开的文本文件路径及名称,单击“读出”命令按钮,在文本框2中显示文件内容。 (三)写入文件 要向文本文件中写入数据,首先建立写对象: Dim 对象名称As New System.IO.StreamWriter(路径和文件名,写入方式,编码方式) 对象名称.Write(要写入的数据)——写的方法 或:对象名称.WriteLine(要写入的数据) 对象名称.Close ——将写对象关闭 【例】读写文件(幻灯片25) 三、MessageBox消息框(幻灯片26~29) 消息框是预先设计好的预定义对话框,常用来在程序设计中输出简单的消息。可以通过Messagebox类的show方法来实现,语法格式如下: Messagebox.show(Prompt [,Title] [,Buttons] [,Icon]) 如:MessageBox.Show("请输入运算符号!", "消息框", MessageBoxButtons.OKCancel, https://www.wendangku.net/doc/704386405.html,rmation) 四、通用对话框(幻灯片32~41) 如果要想生成复杂的对话框,则可以通过: ?打开文件对话框控件(OpenFileDialog) ?保存文件对话框控件(SaveFileDialog) ?字体对话框控件(FontDialog) ?颜色对话框控件(ColorDialog) 1、OpenFileDialog (1)FileName属性 该属性值为一个包括完整路径和文件名的字符串。用户在对话框文件名列表中选定或输入的文件名会保存在该属性中。如果在打开对话框之前为该属性设置了文件名,则该文件名为打开对话框时的推荐文件名。 (2)Filter属性 该属性用于设置打开文件对话框中“文件类型”列表框中的文件类型。一次可设置多种文件类型。每设置一个文件类型称为一个过滤器。设置一个过滤器的语句格式如下: 文字说明|文件名模式 (3)FilterIndex 用于设置或获取打开文件对话框中当前选定过滤器的索引,第一个过滤器的索引值为1,第二个过滤器的索引值为2 (4)Title属性 用于设置对话框标题,默认标题为“打开”。 OpenFileDialog控件最常用的方法是ShowDialog方法,常用的事件为FileOk事件。

相关文档