当前位置:编程学习 > VC++ >>

用VC6.0制作控制面板应用程序

 

 

一、Windows的控制面板应用程序

---- 在Windows的系统目录下可以找到控制面板应用程序,它们是一些扩展名

为cpl的dll,通常用来提供配置服务,如配置网络硬件和软件用的ncpa.cpl,配

置桌面用的desk.cpl等,它们的父窗口都是桌面。运行这类程序的方法很多:双

击控制面板中的图标,双击系统目录下的cpl文件,或者使用如下DOS命令:

rundll32 shell32.dll,Control_RunDLL

< cpl文件> [@n]或者

control < cpl文件> [@n]

 

---- 其中@n用于指定运行运行哪一个小程序(一个cpl文件中可包含多个小程

序),若不带此参数则相当于@0,即运行第一个小程序。例如:

---- Rundll32 shell32.dll,Control_RunDLL main.cpl @n

 

---- 若不带@n参数,则运行鼠标设置;@1则运行键盘设置;@2则运行打印机设

置;@3则显示系统字体。

 

---- Control_RunDLL是shell32.dll中定义的一个函数,大小写敏感,用于启动

控制面板。

 

---- 通过控制面板应用程序来提供配置服务是一种很好的方法,那么如何设计

这种应用程序呢?下面以Visual C++6.0为例进行介绍。

 

二、开发控制面板应用程序

---- 若希望一个文件传输程序启动后自动连接到某一个站点,就需要为其提供

一些缺省值,如:服务器名、用户名、口令等。下面就开发一个控制面板应用

程序来提供这些缺省值,具体步骤为:

---- 1.创建一个"MFC AppWizard (dll)"类型的项目,命名为:MyCplApp,选

择"Regular DLL With MFC statically linked",使它的运行不依赖于其它任何DLL。

 

---- 2.选择Project菜单下的Settings项或按Alt+F7,在Link页中将输出文件

名改为:

 

---- < WindowsDir >< SystemDir >Mycplapp.cpl,在Debug页中将

"Executable for debug session"改为:< WindowsDir >< SystemDir >Control.exe,

以便直接用控制面板运行。对于Win9x,< SystemDir >为System,对于WinNT,

< SystemDir >为System32。

 

---- 3.从MSDN Library Visual Studio 6.0光盘的Smples目录中找到

Ctrlpan.cpp 和Ctrlpan.h 文件,并把它们加到项目中。

 

---- 4.创建如图所示对话框,代号为:IDD_MYDIALOG,用Class Wizard创建

一个CMyDialog类。为每个控件创建成员变量,如"FTP服务器"对应的成员变

量定义为:CString m_strServer。

 

 

 

---- 5.引入或新建一个ICON,代号为:IDI_MYICON,用于控制面板中显示。

 

---- 6.从CControlPanel类(在Ctrlpan.h中定义)继承一个新类CMyPanel,修改

MyPanel.h文件:

 

#include "Ctrlpan.h"

class CMyPanel : public CControlPanel

{   public:

virtual LONG OnInquire(UINT uAppNum, NEWCPLINFO* pInfo);

virtual LONG OnDblclk(HWND hwndCPl,

UINT uAppNum, LONG lData);

};//两个虚拟函数由读者加入

 

---- 7.在MyPanel.cpp中实现MyPanel.h中定义的两个虚拟函数:

LONG CMyPanel::OnInquire(UINT uAppNum,

 NEWCPLINFO* pInfo)

{   //此函数在控制面板打开时被调用,

用于获取资源信息,即填充pInfo结构

pInfo- >dwSize = sizeof(NEWCPLINFO);//指定结构长度

pInfo- >dwFlags = 0;//此成员忽略

pInfo- >dwHelpContext = 0; //此成员忽略

pInfo- >lData = 0;//小程序传递给应用程序的LONG类型的值

pInfo- >hIcon= ::LoadIcon(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDI_MYICON));//加载图标

strcpy(pInfo- >szName, "FTP设置");//设置名称

strcpy(pInfo- >szInfo, "设置FTP缺省信息");//设置描述

strcpy(pInfo- >szHelpFile, "");//此成员忽略

return 0; //不发送CPL_INQUIRE消息

}

LONG CMyPanel::OnDblclk(HWND hwndCPl,

UINT uAppNum, LONG lData)

{   //双击控制面板中的图标时,此函数被调用,

补充:软件开发 , Vc ,

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,