论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

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

文章类别:C语言程序设计 | 发表日期:2010-12-28 9:15:55

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

  在Windows的系统目录下可以找到控制面板应用程序,它们是一些扩展名为cpl的dll,通常用来提供配置服务,如配置网络硬件和软件用的ncpa.cpl,配置桌面用的desk.cpl等,它们的父窗口都是桌面。运行这类程序的方法很多:双击控制面板中的图标、双击系统目录下的cpl文件,或者使用如下DOS命令: 

  rundll32 shell32.dll,Control—RunDLL [@n]或者control [@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页中将输出文件名改为: 

  \\Mycplapp.cpl,在Debug页中将“Executable for debug session”改为:\\Control.exe,以便直接用控制面板运行。对于Win9x,为System,对于WinNT,为System32。 

  3.从MSDN Library Visual Studio 6.0光盘的Samples目录中找到Ctrlpan.cpp 和Ctrlpan.h 文件,并把它们加到项目中。 

  4.创建如图1所示对话框,代号为:IDD—MYDIALOG,用Class Wizard创建一个CMyDialog类。为每个控件创建成员变量,如“FTP服务器”对应的成员变量定义为:CString m—strServer。 

217877__b1301t01.jpg图1 

  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) 

  { //双击控制面板中的图标时,此函数被调用,用于读取或保存设置信息。 

  CMyDialog dlg(CWnd::FromHandle(hwndCPl)); //用父窗口句柄初始化对话框 

  HKEY hcpl;//主键,用于读写注册表 

  if (RegOpenKeyEx(HKEY—CURRENT—USER,″Control Panel\\FTPSet″,0, 

  KEY—QUERY—VALUE, &hcpl) == ERROR—SUCCESS) 

  { DWORD dwType = 1; 

  //字符串类型REG—SZ 

  DWORD dwSize;//字符串长度 

  RegQueryValueEx(hcpl,″FTPServer″,NULL,&dwType, 

  (BYTE*)(LPCTSTR)dlg.m—strServer,&dwSize); 

  RegCloseKey(hcpl); 

  }//查询注册表,读取以前的设置信息,上面仅以m—strServer为例。 

  RegCloseKey(hcpl); 

  if(dlg.DoModal()!=IDOK) return 0; 

  //执行对话框,若用户点击“取消”则返回 

  DWORD dwDisp; 

  //用于接收创建主键的返回值 

  if (RegCreateKeyEx(HKEY—CURRENT—USER,″Control Panel\\FTPSet″,0,″ ″, 

  REG—OPTION—NON—VOLATILE, KEY—WRITE, NULL, 

  &hcpl, &dwDisp) == ERROR—SUCCESS) 

  { RegSetValueEx(hcpl,″FTPServer″,0,REG—SZ,(BYTE*)(LPCTSTR)dlg.m—strServer, dlg.m—strServer.GetLength()); 

  RegCloseKey(hcpl); 

  //将对话框中设置保存到注册表 

  }return 0; 

  } 

  8.修改应用程序头文件MyCplApp.h,加入下面黑体部分代码: 

  #include ″MyPanel.h″ 

  #include ″MyDialog.h″ 

  class CMyCplAppApp : public CWinApp 

  { public: 

  CMyCplAppApp(); 

  DECLARE—MESSAGE—MAP() 

  CMyPanel m—Control; 

  }; 

  9.修改模块定义文件MyCplApp.DEF,输出CPlApplet函数: 

  LIBRARY MYCPLAPP 

  DESCRIPTION ′FTP设置′ 

  EXPORTS 

  CPlApplet 

  10.编译运行 

  按Ctrl+F5编译运行后,控制面板会打开,里面多了一个图标,双击它就弹出MyDialog对话框,输入配置信息后,点击“确定”退出。所有这些信息就保存到注册表的HKEY—CURRENT—USER\Control Panel\FTPSet键下,供文件传输程序读取。

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058