文档库 最新最全的文档下载
当前位置:文档库 › Visual C++(VC)中“选择文件夹”对话框的程序的编写

Visual C++(VC)中“选择文件夹”对话框的程序的编写

Visual C++(VC)中“选择文件夹”对话框的程序的编写
Visual C++(VC)中“选择文件夹”对话框的程序的编写

Visual C++(VC)中“选择文件夹”对话框的程序的编写

2010-04-1001:07A.M.

在实际的MFC编程当中,常常需要弹出对话框选择文件、选择目录等操作,对于选择文件,用CFileDialog就可以很简单的解决,而对于选择目录,则稍稍需要多一些步骤,需要自己创建Dialog。首先创建如下的对话框,并为它创建类Dialog,在Dialog头文件中添加保存目录名的变量CString m_strPath,然后为编辑框右边的按钮添加消息响应函数OnButtonBrowser(),并添加如下代码。

void CDialog::OnButtonBrowser()

{

//TODO:Add your control notification handler code here

UpdateData(TRUE);

char szDir[MAX_PATH];

BROWSEINFO bi;

ITEMIDLIST*pidl;

bi.hwndOwner=this->m_hWnd;//指定父窗口,在对话框显示期间,父窗口将被禁用

bi.pidlRoot=NULL;//如果指定NULL,就以“桌面”为根

bi.pszDisplayName=szDir;

bi.lpszTitle="请选择目录";//这一行将显示在对话框的顶端

bi.ulFlags=BIF_STATUSTEXT|BIF_USENEWUI|BIF_RETURNONLYFSDIRS;

bi.lpfn=NULL;

bi.lParam=0;

bi.iImage=0;

pidl=SHBrowseForFolder(&bi);

if(pidl==NULL)return;

if(!SHGetPathFromIDList(pidl,szDir))return;

else m_strPath=szDir;

UpdateData(FALSE);

}

当程序启动起来的时候,点击按钮,就会弹出如下的选择目录的对话框

=========================================================================== =======

Visual C++(VC)中,BROWSEINFO结构中包含有用户选中目录的重要信息。

BROWSEINFO结构

●定义

typedef struct_browseinfo

{

HWND hwndOwner;

LPCITEMIDLIST pidlRoot;

LPSTR pszDisplayName;

LPCSTR lpszTitle;

UINT ulFlags;

BFFCALLBACK lpfn;

LPARAM lParam;

int iImage;

}BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;

●成员变量

hwndOwner:浏览文件夹对话框的父窗体句柄。

pidlRoot:ITEMIDLIST结构的地址,包含浏览时的初始根目录,而且只有被指定的目录和其子目录才显示在浏览文件夹对话框中。该成员变量可以是NULL,在此时桌面目录将被使用。

pszDisplayName:用来保存用户选中的目录字符串的内存地址(缓冲区)。该缓冲区的大小缺省是定义的MAX_PATH常量宏。

lpszTitle:该浏览文件夹对话框对话框的显示文本,用来提示该浏览文件夹对话框的功能、作用和目的。

ulFlags:该标志位描述了对话框的选项。它可以为0,也可以是以下常量的任意组合:

BIF_BROWSEFORCOMPUTER:返回计算机名。除非用户选中浏览器中的一个计算机名,否则该对话框中的“OK”按钮为灰色。

BIF_BROWSEFORPRINTER:返回打印机名。除非选中一个打印机名,否则“OK”按钮为灰色。

BIF_BROWSEINCLUDEFILES:浏览器将显示目录,同时也显示文件。

BIF_DONTGOBELOWDOMAIN:在树形视窗中,不包含域名底下的网络目录结构。

BIF_EDITBOX:浏览对话框中包含一个编辑框,在该编辑框中用户可以输入选中项的名字。

BIF_RETURNFSANCESTORS:返回文件系统的一个节点。仅仅当选中的是有意义的节点时,“OK”按钮才可以使用。

BIF_RETURNONLYFSDIRS:仅仅返回文件系统的目录。例如:在浏览文件夹对话框中,当选中任意一个目录时,该“OK”按钮可用,而当选中“我的电脑”或“网上邻居”等非有意义的节点时,“OK”按钮为灰色。

BIF_STATUSTEXT:在对话框中包含一个状态区域。通过给对话框发送消息使回调函数设置状态文本。

BIF_VALIDATE:当没有BIF_EDITBOX标志位时,该标志位被忽略。如果用户在编辑框中输入的名字非法,浏览对话框将发送BFFM_VALIDATEFAILED消息给回调函数。

lpfn:应用程序定义的浏览对话框回调函数的地址。当对话框中的事件发生时,该对话框将调用回调函数。该参数可用为NULL。

lParam:对话框传递给回调函数的一个参数指针。

iImage:与选中目录相关的图像。该图像将被指定为系统图像列表中的索引值。

=========================================================================== =======

Windows Shell的一个功能在于管理并提供方法存取系统中的众多对像,這些对像包括了文件,网路上的计算机,控制面板程序,回收站等等,为了识别每一个对像,Windows Shell使用了Item ID来表示它們,而Iten ID Lists用来表示一个对像的路径。所以,ITEMID和ITEMIDLIST的关系类似于文件名和路径的关系。如果只对文件系统而言的话,ITEMIDLIST可以看成是路径的另一中表示法,Windows Shell也提供了函数來进行转化。

如果SHBrowseForFolder函数返回的ITEMIDLIST结构指针不为NULL,就可以使用SHGetPathFromIDList函数取得存储于ITEMIDLIST结构指针中的路径信息。SHGetPathFromIDList 函数的原型如下:

WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(

LPCITEMIDLIST pidl,

LPSTR pszPath

);

第一个参数就是存储了路径信息的ITEMIDLIST结构指针,第二个参数是一个字符缓冲区,用于接收字符串。它应当有_MAX_PATH所指定的长度,_MAX_PATH在Windows系统中被定义为260个字符,其大小可以是260或520个字节,这取决于是否使用了Unicode。

附带创建“浏览文件对话框”创建可以多选的“浏览文件对话框”

=========================================================================== =======

一、创建“浏览文件对话框”

用CFileDialog类实现,比如:

CFileDialog FDlg(TRUE,".doc",NULL,OFN_HIDEREADONLY,"word文件(*.doc)|*.doc|所有文件(*.*)|*.*||");

if(FDlg.DoModal()==IDOK)

{

filePath=FDlg.GetPathName();

UpdateData(false);

filePath.Replace("\\","\\\\");

}

CFileDialog文件选择对话框的使用:

首先构造一个对象并提供相应的参数,构造函数原型如下:

CFileDialog::CFileDialog(

BOOL bOpenFileDialog,//为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框

LPCTSTR lpszDefExt=NULL,//默认的文件扩展名

LPCTSTR lpszFileName=NULL,//默认的文件名

DWORD dwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,//设定风格

LPCTSTR lpszFilter=NULL,//列出可供选择的文件类型和相应的扩展名

CWnd*pParentWnd=NULL//父窗口句柄指针

);

LPCTSTR lpszFilter参数格式如:"Chart Files(*.xlc)|*.xlc|Worksheet Files(*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc;*.xls|All Files(*.*)|*.*||";文件类型说明和扩展名间用|分隔,同种类型文件的扩展名间可以用;分割,每种文件类型间用|分隔,末尾用||指明。

创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:

CString CFileDialog::GetPathName()得到完整的文件名,包括目录名和扩展名如:c:\test\test1.txt CString CFileDialog::GetFileName()得到完整的文件名,包括扩展名如:test1.txt

二、创建可以多选的“浏览文件对话框”

使用CFileDialog类并设置OFN_ALLOWMULTISELECT标志,OPENFILENAME结构体的lpstrFile成员是一个指向用户申请分配的缓冲区,里面接受所选的路径和文件名列表,这个列表的每一项由一个NULL隔开,最末以两个NULL结束。nMaxFile成员指明了缓冲区的大小,如果所选择的文件名的加起来的总长度超过了此值,则DoModal函数返回IDCANCEL,如果用户试图打开超过缓冲区大小的文件集的话,CommDlgExtendedError()将返回FNERR_BUFFERTOOSMALL,这时候,lpstrFile 的前两个byte将会包含实际需要的缓冲区的字节数。

如果是在Windows NT 4.0下,能被拷贝到lpstrFile缓冲区的字节数被限制在2562字节以内,如果超过将被截断。

以下是一个使用该类进行多文件名选择的例子:

#include"cderr.h"//for definition of FNERR_BUFFERTOOSMALL

CFileDialog dlg(TRUE,NULL,NULL, OFN_ALLOWMULTISELECT,NULL,NULL);

DWORD MAXFILE=4000;

dlg.m_ofn.nMaxFile=MAXFILE;

char*pc=new char[MAXFILE];

dlg.m_ofn.lpstrFile=pc;

dlg.m_ofn.lpstrFile[0]=NULL;

int iReturn=dlg.DoModal();

if(iReturn==IDOK)

{

int nCount=0;

POSITION pos=dlg.GetStartPosition();

CString FileName;

while(pos!=NULL)

{

FileName=dlg.GetNextPathName(pos);

AfxMessageBox(FileName);//显示所选的多个文件的路径

nCount++;//记录所选文件的数目

}

CString str;

str.Format("Successfully opened%d files\n",nCount);

AfxMessageBox(str);

}

else if(iReturn==IDCANCEL)

AfxMessageBox("Cancel");

if(CommDlgExtendedError()==FNERR_BUFFERTOOSMALL) AfxMessageBox("BUFFERTOOSMALL");

delete[]pc;

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,

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开发大军。

(完整版)VC6.0MFC串口通信编写全过程

其于MFC的串口调试助手编辑过程 一、新建 打开VC6.0 文件新建工程MFC AppWiard(exe) 位置(选择保存工程位置)工程名称(输入工程名XXXX)确定选择基本对话框下一步下一步下一步选择(CXXXXDlg)完成确定在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消”及提示框)删除或修改使用,至此基本框架完成如下图: 二、往生成的基本框架中添加控件 1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再 将控件添加到基本框内使用,步骤如下: 菜单栏工程添加到工程Components and controls…Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0”Insert 确定OK 关闭此子窗口完成添加操作标志如上图所示。 2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:此控件(标志)是下面步骤添加进来的串口控件 基本框架

3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控 件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如 下图所示: 选择其中任 意一个作为 输入编辑框 及输出编辑 框 这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示, 上图是运行后的效果。 4、对以上四个控件编程步骤如下: a、右击串口通信控件建立类向导Member variables Control IDS中选 择IDC_MSCOMM1 add variable…Member variable name中输入控件变量名 m_ctrlComm(变量名可以随意选取,但程序中应与所取变量名一致)OK 确 定

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);

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中添加

VC++编写简单串口上位机程序

VC++编写简单串口上位机程序 2010年4月13日10:23:40 串口通信,MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境等不少,VB、C#、LABVIEW等等,我会的语言很少,C语言用得比较多,但是还没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相当蹩脚的C++写出了一个简单的串口上位机程序,分享 一下,体验一下单片机和PC通信的乐趣。 编译环境:VC++6.0 操作系统:VMWare虚拟出来的Windows XP 程序实现功能: 1、 PC初始化COM1口,使用n81方式,波特率57600与单片机通信。PC的COM口编号可以 通过如下方式修改: 当然也可以通过上位机软件编写,通过按钮来选择COM端口号,但是此次仅仅是简单的例程,就没有弄那么复杂了。COM1口可用的话,会提示串口初始化完毕。否则会提示串口已经打开Port already open,表示串口已经打开,被占用了。 2、点击开始转换,串口会向单片机发送0xaa,单片机串口中断接收到0xaa后启动ADC转换一次,并把转换结果ADCL、ADCH共两个字节的结果发送至PC,PC进行数值转换后在窗口

里显示。(见文章末尾图) 3、为防止串口被一只占用,点击关闭串口可以关闭COM1,供其它程序使用,点击后按钮 变为打开串口,点击可重新打开COM1。 程序的编写: 1、打开VC++6.0建立基于对话框的MFC应用程序Test,

2、在项目中插入MSComm控件:工程->增加到工程->Components and Controls->双击Registered ActiveX Controls->选择Microsoft Communications Control, version 6.0->Insert,按默认值添加,你会发现多了个电话图标,这是增加后串口通信控件。

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++编写电子程序 .diybl. 时间:2008-08-27 作者:佚名编辑:本站点击:635 [评论] VC++编写电子程序 一、概述 ---- 本文主要讲述如何使用Visual C++用MAPI编写E-mail程序。MAPI是包含在Windows之中的, 因此不需要安装其他额外的部件。MAPI有以下三种形式: SMAPI,Simple MAPI,简单的MAPI CMC,Common Messaging Calls,一般通讯调用 完整的MAPI ---- SMAPI和CMC都包含在完整的MAPI中,当用户想执行一些高级操作,比如编写自己的E-mail服务器的时候, 必须使用完整的MAPI。本文主要阐述如何编写能够收发电子的程序,因此使用SMAPI就足够了。 二、编写电子程序 3-1 初始化MAPI ---- 要使用MAPI,必须首先对它进行初始化。初始化包括以下三个步骤: 装载MAPI32.DLL动态库 找到想要调用的MAPI函数地址 登录到电子对象 3-1-1 装载MAPI32.DLL ---- 要装载MAPI,用户必须程序运行时动态的装载一个动态库。LoadLibrary函数提供了此功能, 它定位一个动态库,并返回HINSTANCE局柄(需要保存该句柄)。 LoadLibrary的语法如下: LoadLibrary ( lpLibFileName ); 其中lpLibFileName为LPCTSTR结构变量, 是所要调用的库的路径和名称。 程序示例: // 调用MAPI32.DLL并计算函数地址 HINSTANCE hInstMail; hInstMail = ::LoadLibrary ( “MAPI32.DLL” ); if ( hInstMail == NULL ) { // 错误处理 // 受篇幅限制,下面的错误处理部分省略 } 3-1-2 确定函数地址 ---- 由于MAPI32.DLL是被动态装载的,因此不知道所要调用的函数地址,也就不能一开始就调用它们,

反应器介绍(操作方式、操作条件)5页

反应器介绍 简介 用于实现液相单相反应过程和液液、气液、液固、气液固等多相反应过程。器内常设有搅拌(机械搅拌、气流搅拌等)装置。在高径比较大时,可用多层搅拌桨叶。在反应过程中物料需加热或冷却时,可在反应器壁处设置夹套,或在器内设置换热面,也可通过外循环进行换热。 反应器的应用始于古代,制造陶器的窑炉就是一种原始的反应器。近代工业中的反应器形式多样,例如:冶金工业中的高炉和转炉;生物工程中的发酵罐以及各种燃烧器,都是不同形式的反应器。 类型 常用反应器的类型(见表)有:①管式反应器。由长径比较大的空管或填充管构成,可用于实现气相反应和液相反应。②釜式反应器。由长径比较小的圆筒形容器构成,常装有机械搅拌或气流搅拌装置,可用于液相单相反应过程和液液相、气液相、气液固相等多相反应过程。用于气液相反应过程的称为鼓泡搅拌釜(见鼓泡反应器);用于气液固相反应过程的称为搅拌釜式浆态反应器。③有固体颗粒床层的反应器。气体或(和)液体通过固定的或运动的固体颗粒床层以实现多相反应过程,包括固定床反应器、流化床反应器、移动床反应器、涓流床反应器等。④塔式反应器。用于实现气液相或液液相反应过程的塔式设备,包括填充塔、板式塔、鼓泡塔等(见彩图)。⑤喷射反应器。利用喷射器进行混合,实现气相或液相单相反应过程和气液相、液液相等多相反应过程的设备。⑥其他多种非典型反应器。如回转窑、曝气池等。

操作方式 反应器按操作方式可分为: ①间歇釜式反应器,或称间歇釜。 操作灵活,易于适应不同操作条件和产品品种,适用于小批量、多品种、反应时间较长的产品生产。间歇釜的缺点是:需有装料和卸料等辅助操作,产品质量也不易稳定。但有些反应过程,如一些发酵反应和聚合反应,实现连续生产尚有困难,至今还采用间歇釜。 间歇操作反应器系将原料按一定配比一次加入反应器,待反应达到一定要求后,一次卸出物料。连续操作反应器系连续加入原料,连续排出反应产物。当操作达到定态时,反应器内任何位置上物料的组成、温度等状态参数不随时间而变化。半连续操作反应器也称为半间歇操作反应器,介于上述两者之间,通常是将一种反应物一次加入,然后连续加入另一种反应物。反应达到一定要求后,停止操作并卸出物料。 间歇反应器的优点是设备简单,同一设备可用于生产多种产品,尤其适合于医药、染料等工业部门小批量、多品种的生产。另外,间歇反应器中不存在物料的返混,对大多数反应有利。缺点是需要装卸料、清洗等辅助工序,产品质量不易稳定。 ②连续釜式反应器,或称连续釜,可避免间歇釜的缺点,但搅拌作用会造成釜内流体的返混。在搅拌剧烈、液体 粘度较低或平均停留时间较长的场合,釜内物料流型可视作全混流,反应釜相应地称作全混釜。在要求转化率高或有串联副反应的场合,釜式反应器中的返混现象是不利因素。此时可采用多釜串联反应器,以减

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

办公软件试题操作要求及题解步骤

办公软件应用(Windows平台)(高级操作员级) 试题及题解步骤 王 毅 2006.6 主要内容 1 操作系统应用 2 文档处理的基本操作 3 文档处理的综合操作 4 数据表格处理的基本操作 5 数据表格处理的综合操作 6 演示文稿的制作 7 办公软件的联合应用 8 桌面信息管理程序应用 9 其他高级应用 第一单元 操作系统应用 操作要求:考生按如下要求进行操作。 1. 开机,进入windows,启动“资源管理器”。 2. 建立考生文件夹,文件夹名为考生准考证后七位。 3. C盘中有考试题库“win2004gjw”文件夹,文件夹结构如图: 4. 根据选题单指定题号,将题库中ksml2文件夹内相应的文件复制 到考生文件夹中,将文件分别重命名为A1、A2 、A3 、A4 、 A5 、 A6 、 A7 、 A8,扩展名不变。 5. 系统设置与优化: 1) 用磁盘清理程序对C驱动器进行清理,在进行磁盘清理时将整 个屏幕以图片的形式保存到考和文件夹中,文件命名为A1a。 (不必等待操作执行完毕) 2) 自定义任务栏,设置任务栏中的时钟隐蔽,并且在“开始”菜单 中显示小图标,将设置的效果屏幕以图片的形式保存到考生文 件夹中,文件命名为A1b,图片保存之后,恢复原设置。 解题步骤:

1. 右击“我的电脑”图标→资源管理器。 2. 在资源管理器中单击D:盘→右击右侧空白区域→新建→文件夹 →输入文件夹名(准考证号后七位数字)→回车确定。 3. 根据选题单→把相应文件选定(按Ctrl单击每个文件)→右键菜 单→复制;打开考生文件夹→右键菜单→粘贴→全选→右键菜单 →属性→取消只读→右击文件→重命名→输入相应文件名。 4. 系统设置与优化,并以图片形式保存。方法:按PrtSc/SysRq 键,保存整个桌面,按Alt+P键保存当前活动窗口。或用红蜻蜓 抓图精灵。 a) 开始→附件→系统工具→磁盘清理程序→磁盘碎片整理程序→ 按PrtSc键→启动画图程序→粘贴→保存在考生文件夹下,文件名为A1a。 b) 右击任务栏→属性→在对话框中按要求设置→勾选隐藏时钟→ 开始菜单标签→自定义→勾选显示小图标→确定。 第二单元 文档处理的基本操作 操作要求:打开文档A2.doc,按照样文进行如下操作: 1. 设置文档的页面格式: a) 按样文2-1A,设置页眉和页脚,在页眉左侧录入文本“音乐的 魅力”,右侧插入域“第X页共Y页”。 b) 按样文2-1A,将正文前两段设置为三栏格式,加分隔线。 2. 设置文档的编排格式: a) 按样文2-1A,将标题设置为艺术字,式样为艺术字库的第2行 第5列,字体为华文行楷,环绕方式为紧密型。 b) 按样文2-1A,将正文前两段字体设置为楷体、小四,字体颜色 为蓝色。 c) 按样文2-1A,将正文最后一段设置为仿宋,小四。 d) 按样文2-1A,将正文第一段设置为首字下沉格式,下沉行数为 二行,首字字体设置为华文行楷。 3. 文档的插入设置: a) 在样文所示位置插入图片,图片为ksml3\tu2-1.bmp,设置图片 大小缩放28%,环绕方式为紧密型。 b) 在最后一段“奋进”文本处添加批注“此处用词不当。” 4. 插入、绘制文档表格:在文档尾部插入一一个3行3列的表格并 合并第3列单元格。 5. 文档的整理、修改和保护:保护的窗体,密码为ks2-1。

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();

vc编写电子邮件程序

VC++编写电子程序 .diybl.时间:2008-08-27作者:佚名编辑:本站点击:635 [评论] VC++编写电子程序 一、概述 ---- 本文主要讲述如何使用Visual C++用MAPI编写程序。MAPI是包含在Windows之中的,因此不需要安装其他额外的部件。MAPI有以下三种形式: SMAPI,Simple MAPI,简单的MAPI CMC,mon Messaging Calls,一般通讯调用 完整的MAPI ---- SMAPI和CMC都包含在完整的MAPI中,当用户想执行一些高级操作,比如编写自己的服务器的时候, 必须使用完整的MAPI。本文主要阐述如何编写能够收发电子的程序,因此使用SMAPI就足够了。 二、编写电子程序 3-1 初始化MAPI ---- 要使用MAPI,必须首先对它进行初始化。初始化包括以下三个步骤: 装载MAPI32.DLL动态库 找到想要调用的MAPI函数地址 登录到电子对象 3-1-1 装载MAPI32.DLL ---- 要装载MAPI,用户必须程序运行时动态的装载一个动态库。LoadLibrary函数提供了此功能, 它定位一个动态库,并返回HINSTANCE局柄(需要保存该句柄)。 LoadLibrary的语法如下: LoadLibrary ( lpLibFileName ); 其中lpLibFileName为LPCTSTR结构变量, 是所要调用的库的路径和名称。 程序示例: // 调用MAPI32.DLL并计算函数地址 HINSTANCE hInstMail; hInstMail = ::LoadLibrary ( “MAPI32.DLL” ); if ( hInstMail == NULL ) { // 错误处理 // 受篇幅限制,下面的错误处理部分省略 } 3-1-2 确定函数地址 ---- 由于MAPI32.DLL是被动态装载的,因此不知道所要调用的函数地址,也就不能一开始就调用它们, 而要通过函数名获得函数的地址,并在动态库中查找每一个函数并核实。因此首先必须为这

操作系统复习题与答案

《操作系统》练习及参考答案 第1章操作系统概述 1.3.1 选择最合适的答案 1.一般用户更喜欢使用的系统是()。 A.手工操作 B.单道批处理 C.多道批处理 D.多用户分时系统 2. 与计算机硬件关系最密切的软件是()。 A.编译程序 B.数据库管理系统 C.游戏程序 D.OS 3. 现代OS具有并发性和共享性,是()的引入导致的。 A.单道程序 B. 磁盘 C. 对象 D.多道程序 4. 早期的OS主要追求的是()。 A.系统的效率 B.用户的方便性 C.可移植 D.可扩充性 5.()不是多道程序系统 A.单用户单任务 B.多道批处理系统 C.单用户多任务 D.多用户分时系统 6.()是多道操作系统不可缺少的硬件支持。 A.打印机 B.中断机构 C.软盘 D.鼠标 7. 特权指令可以在()执行。 A.目态 B.浏览器中 C.任意的时间 D.进程调度中 8. 没有了()计算机系统就启动不起来。 A.编译器 B.DBMS C.OS D.浏览器 9. 通道能够完成()之间的数据传输。 A.CPU与外设 B.存与外设 C.CPU与主存 D.外设与外设 10. 操作系统的主要功能有()。 A.进程管理、存储器管理、设备管理、处理机管理 B.虚拟存储管理、处理机管理、进程调度、文件系统 C.处理机管理、存储器管理、设备管理、文件系统 D.进程管理、中断管理、设备管理、文件系统 11. 单处理机计算机系统中,()是并行操作的。 A.处理机的操作与通道的操作是并行的 B.程序与程序 C.主程序与子程序 D.用户程序与操作系统程序 12. 处理机的所有指令可以在()执行。 A.目态 B.浏览器中 C.任意的时间 D.系统态 13.()功能不是操作系统直接完成的功能。 A.管理计算机硬盘 B.对程序进行编译 C.实现虚拟存储器 D.删除文件

VC6.0MFC串口通信编写全过程

其于MFC 的串口调试助手编辑过程 一、新建 打开 VC6.0 文件 新建 工程 MFC AppWiard(exe) 位置(选择保存工程位置) 工程名称(输入工程名XXXX ) 确定 选择基本对话框 下一步 下一步 下一步 选择(CXXXXDlg ) 完成 确定 在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消” 及提示框)删除或修改使用,至此基本框架完成如下图: 二、往生成的基本框架中添加控件 1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下: 菜单栏 工程 添加到工程 Components and controls … Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0” Insert 确定 OK 关闭此子窗口完成添加操作标志如上图所示。 2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩 形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:

3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示: 这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。 4、对以上四个控件编程步骤如下: a 、右击串口通信控件 建立类向导 Member variables Control IDS 中选择IDC_MSCOMM1 add variable … Member variable name 中输入控件变量名m_ctrlComm (变量名可以随意选取,但程序中应与所取变量名一致) OK 确定

操作系统复习题选择题1

二、选择题 1.以下有关操作系统的叙述中,哪一个是不正确的? (1) 1.操作系统管理系统中的各种资源 1.操作系统为用户提供的良好的界面 1.操作系统就是资源的管理者和仲裁者 1.操作系统是计算机系统中的一个应用软件 2.操作系统所占用的系统资源和所需的处理器时间称为 (1) 1.资源利用率 1.系统性能 1.系统吞吐率 1.系统开销 3.操作系统所管理的资源包括:Ⅰ1PU Ⅱ程序Ⅲ数据Ⅳ外部设备 (1) 1.Ⅰ和Ⅱ 1.Ⅱ和Ⅲ 1 Ⅰ、Ⅱ和Ⅲ 1.全部 4.分时操作系统的主要特点是 (1) 1.个人独占机器资源 1.自动控制作业运行 1.高可靠性和安全性 1.多个用户共享主机资源 5.分时操作系统的主要目标是 (1) 1.提高计算机系统的实时性 1.提高计算机系统的利用率1.提高软件的运行速度 1.提高计算机系统的交互性 7.完成中断响应工作的是 (1) 1.系统核心 1.中断处理程序 1.用户程序 1.中断硬件装置

8.如果有多个中断同时发生,系统将根据中断优先级响应优先级高的中断请求,若要调整中断事件的响应次序,可以利用 (1) 1.中断嵌套 1.中断响应 1.中断屏蔽 1.中断向量 9.以下有关强迫性中断事件的叙述中,哪一个是错误的 (1?) 1.输入输出中断来自通道或各种外部设备,用于反映通道或设备的工作情况 1.程序性中断,是正在运行程序有意识安排的而引起的中断 1.硬件故障中断是机器发生错误时产生的中断 1.时钟中断是硬件时钟到时等 10.下列中断中,哪一个不属于强迫性中断 (1) 1.设备出错 1.掉电 1.时间片到时 1.执行print语句 11.下列哪一个中断属于程序性中断 (1) 1.打印机结束工作 1.地址越界 1.时间片到时 1.掉电 12.在中断处理中,输入输出中断是指 (1) Ⅰ.设备出错Ⅱ.数据传输结束 1.只有Ⅰ 1.只有Ⅱ 1.Ⅰ和Ⅱ 1.都不是 14.计算机系统中设置的访管指令 (1) 1.只能在目录下执行 1.只能在管态下执行

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/8f17883716.html, 详细来源请参考:https://www.wendangku.net/doc/8f17883716.html,/techntxt/201298191132524755545 VC++自定义控件的建立及使用方法来源:https://www.wendangku.net/doc/8f17883716.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() {

相关文档
相关文档 最新文档