📄 如何编写控制面板程序.htm
字号:
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 11">
<meta name=Originator content="Microsoft Word 11">
<link rel=File-List href="如何编写控制面板程序.files/filelist.xml">
<link rel=Edit-Time-Data href="如何编写控制面板程序.files/editdata.mso">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<title>如何编写控制面板程序</title>
<!--[if gte mso 9]><xml>
<o:DocumentProperties>
<o:Author>pop</o:Author>
<o:LastAuthor>pop</o:LastAuthor>
<o:Revision>1</o:Revision>
<o:TotalTime>0</o:TotalTime>
<o:Created>2006-04-11T12:43:00Z</o:Created>
<o:LastSaved>2006-04-11T12:43:00Z</o:LastSaved>
<o:Pages>1</o:Pages>
<o:Words>999</o:Words>
<o:Characters>5699</o:Characters>
<o:Company>baodi</o:Company>
<o:Lines>47</o:Lines>
<o:Paragraphs>13</o:Paragraphs>
<o:CharactersWithSpaces>6685</o:CharactersWithSpaces>
<o:Version>11.5606</o:Version>
</o:DocumentProperties>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
</head>
<body lang=ZH-CN style='tab-interval:21.0pt;text-justify-trim:punctuation'>
<div class=Section1 style='layout-grid:15.6pt'>
<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width="100%"
style='width:100.0%;mso-cellspacing:0cm;mso-padding-alt:0cm 0cm 0cm 0cm'>
<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:30.0pt'>
<td style='padding:0cm 0cm 0cm 0cm;height:30.0pt'>
<p class=MsoNormal align=center style='text-align:center;mso-pagination:widow-orphan'><b><span
style='font-size:12.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:
0pt'>如何编写控制面板程序</span></b><span lang=EN-US style='font-size:9.0pt;font-family:
宋体;mso-bidi-font-family:宋体;mso-font-kerning:0pt'><o:p></o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes;height:18.75pt'>
<td style='border:none;border-bottom:solid windowtext 1.5pt;padding:0cm 0cm 0cm 0cm;
height:18.75pt'>
<p class=MsoNormal align=center style='text-align:center;mso-pagination:widow-orphan'><span
style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:
0pt'>【文章出处:转载】<span lang=EN-US> </span>【作者:未知】<span lang=EN-US> </span>【发布时间:<span
lang=EN-US>2005-01-25</span>】<span lang=EN-US> </span>【查看: <span
lang=EN-US><script language="JavaScript" src="/php/count.php?artID=10759&view=yes">
</script>16</span>次】 <span lang=EN-US><o:p></o:p></span></span></p>
</td>
</tr>
</table>
<p class=MsoNormal align=left style='text-align:left;mso-pagination:widow-orphan'><span
lang=EN-US style='font-size:9.0pt;font-family:宋体;mso-bidi-font-family:宋体;
display:none;mso-hide:all;mso-font-kerning:0pt'><o:p> </o:p></span></p>
<div align=center>
<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width="96%"
style='width:96.0%;mso-cellspacing:0cm;mso-padding-alt:0cm 0cm 0cm 0cm'>
<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:3.0pt'>
<td colspan=3 style='padding:0cm 0cm 0cm 0cm;height:3.0pt'>
<p class=MsoNormal align=left style='text-align:left;mso-pagination:widow-orphan'><span
lang=EN-US style='font-size:3.0pt;mso-bidi-font-size:9.0pt;font-family:宋体;
mso-bidi-font-family:宋体;mso-font-kerning:0pt'><o:p> </o:p></span></p>
</td>
</tr>
<tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
<td valign=top style='padding:0cm 0cm 0cm 0cm' id=fontzoom>
<p class=MsoNormal align=left style='text-align:left;line-height:15.0pt;
mso-pagination:widow-orphan'><span lang=EN-US style='font-size:10.0pt;
font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning:0pt'><o:p> </o:p></span></p>
<p class=MsoNormal align=left style='text-align:left;line-height:15.0pt;
mso-pagination:widow-orphan'><span style='font-size:10.0pt;font-family:宋体;
mso-bidi-font-family:宋体;mso-font-kerning:0pt'>控制面板程序是用户用于配置<span lang=EN-US>Windows</span>环境的一些特殊动态连接库<span
lang=EN-US>(DLL)</span>。<span lang=EN-US>Windows</span>已经为我们提供了一些标准的控制面板程序,如字体、键盘、鼠标设置等。我们也可以根据实际的需要创建自己的控制面板程序,以便让用户来查看或者修改特定软硬件的参数设置。<span
lang=EN-US> <br>
<br>
</span>控制面板的功能和操作方式<span lang=EN-US> <br>
<br>
</span>控制面板程序的主要功能是显示一个对话框让用户完成特定的任务。但是,与其它应用程序不同的是,控制面板程序并不是一个独立的应用程序,它不提供标准菜单或者其它方法让用户直接去操作这些对话框,而是在其他应用程序(如控制面板)的控制下操作和显示它们的对话框的。<span
lang=EN-US> <br>
<br>
</span>控制面板程序通常是由一个<span lang=EN-US>Windows</span>的系统工具(即控制面板)所控制,从而让用户来运行的。但是,其它应用程序只要发送控制面板程序所需要的消息并且处理它们的返回值同样可以加载并且管理这些控制面板程序,为了陈述简单,下文中我们将这类程序统称为控制面板。<span
lang=EN-US> <br>
<br>
</span>大多数的控制面板程序仅显示并且维护一个对话框让用户来控制系统某一个部件的参数设置以及操作方式,但事实上控制面板程序可以提供多个对话框来控制多个系统部件(这些单个的对话框通常被称为<span
lang=EN-US>Applet</span>小程序)。为了区分这些对话框,控制面板程序通常为每个对话框提供一个图标。控制面板则把这些图标显示出来,供用户选择不同的对话框进行配置。<span
lang=EN-US> <br>
<br>
</span>程序入口函数<span lang=EN-US> <br>
<br>
</span>前面提到,控制面板程序是特殊的动态连接库(<span lang=EN-US>DLL</span>),在每一个控制面板程序中必须提供一个标准的函数入口<span
lang=EN-US>PlApplet ,</span>控制面板程序通过这个函数来接收控制面板发送的消息,从而执行相应的功能,如初始化程序、显示并且管理对话框以及关闭程序等。<span
lang=EN-US> <br>
<br>
</span>当控制面板首次加载控制面板程序时取得<span lang=EN-US>CPlApplet</span>函数的地址,通过该地址去调用控制面板程序的函数以及给它发送消息。<span
lang=EN-US> <br>
<br>
</span>控制面板可以向控制面板程序发送的消息名称及其意义如下表所示:<span lang=EN-US> <br>
</span>消息名称 含义<span lang=EN-US> <br>
CPL_DBLCLK </span>该消息通知<span lang=EN-US>CPlApplet</span>函数用户双击了某对话框相关联的图标。<span
lang=EN-US>CPlApplet</span>应该显示相应的对话框并且完成用户指定的任务。<span lang=EN-US> <br>
CPL_EXIT </span>该消息在最后一条<span lang=EN-US>CPL_STOP</span>消息之后,并且控制面板调用<span
lang=EN-US>FreeLibrary </span>函数释放包含控制面板程序的动态连接库<span lang=EN-US>DLL </span>之前调用。<span
lang=EN-US>CPlApplet</span>应该释放所用资源准备关闭。<span lang=EN-US> <br>
CPL_GETCOUNT </span>该消息在发送了<span lang=EN-US>CPL_INIT</span>消息之后发送,<span
lang=EN-US>CPlApplet</span>应该返回一个整数指明它支持多少个对话框。<span lang=EN-US> <br>
CPL_INIT </span>该消息在控制面板动态连接库<span lang=EN-US>DLL</span>程序首次加载时调用,<span
lang=EN-US> CPlApplet</span>在此可以执行一些初始化过程,包括内存的分配。<span lang=EN-US> <br>
CPL_INQUIRE </span>该消息在<span lang=EN-US>CPL_GETCOUNT</span>消息之后发送,让<span
lang=EN-US>CPlApplet</span>提供特定对话框的信息。<span lang=EN-US>CPlApplet</span>的<span
lang=EN-US>lParam2</span>参数指向一个<span lang=EN-US>CPLINFO</span>结构。<span
lang=EN-US> <br>
CPL_NEWINQUIRE </span>该消息在<span lang=EN-US>CPL_GETCOUNT</span>消息之后发送,让<span
lang=EN-US>CPlApplet</span>提供指定对话框的信息。参数<span lang=EN-US>lParam2</span>是指向<span
lang=EN-US>NEWCPLINFO</span>结构的指针,在<span lang=EN-US>Windows 95 and Windows NT
version 4.0</span>,为了提高性能,控制面板程序应该处理<span lang=EN-US>CPL_INQUIRE</span>消息,而不是<span
lang=EN-US>CPL_NEWINQUIRE</span>消息。<span lang=EN-US> <br>
CPL_STOP </span>在控制面板关闭前向每一个对话框发送该消息。<span lang=EN-US>CPlApplet</span>应该释放与给定对话框相关联的内存资源。<span
lang=EN-US> <br>
<br>
</span>消息处理<span lang=EN-US> <br>
<br>
</span>回调函数<span lang=EN-US>CPlApplet</span>处理所有由控制面板发送给控制面板程序的上述消息,这些消息是按照特定的顺序来发送并且处理的。<span
lang=EN-US> <br>
<br>
</span>当控制面板首次加载控制面板程序的动态连接库时,<span lang=EN-US>CPlApplet</span>收到<span
lang=EN-US>CPL_INIT</span>消息。<span lang=EN-US>CPlAppet</span>在处理该消息的程序中应该执行一些初始化的工作,如分配内存等,并且返回非<span
lang=EN-US>0</span>值;如果<span lang=EN-US>CPlApplet</span>初始化失败,则应该返回<span
lang=EN-US>0</span>,控制面板将停止向<span lang=EN-US>CPlApplet</span>发送消息并且释放已经加载的动态连接库<span
lang=EN-US>DLL</span>。<span lang=EN-US> <br>
<br>
</span>当<span lang=EN-US>CPL_INIT</span>消息处理成功之后,<span lang=EN-US>CPlApplet</span>函数将收到<span
lang=EN-US>CPL_GETCOUNT</span>消息,<span lang=EN-US>CPlApplet</span>函数必须返回该控制面板程序所支持的对话框的数目。<span
lang=EN-US> <br>
<br>
</span>对应控制面板所支持的每一个对话框,<span lang=EN-US>CPlApplet</span>函数收到由控制面板发送的一条<span
lang=EN-US>CPL_INQUIRE</span>消息和一条<span lang=EN-US>CPL_NEWINQUIRE</span>消息。函数需要用控制面板程序的信息填充<span
lang=EN-US>CPLINFO</span>或者<span lang=EN-US>NEWCPLINFO</span>结构体,如名称、图标以及描述字符串等。多数控制面板程序仅需处理<span
lang=EN-US>CPL_INQUIRE</span>消息而将<span lang=EN-US>CPL_NEWINQUIRE</span>消息忽略。<span
lang=EN-US>CPL_INQUIRE</span>通过一个控制面板能够缓存的结构存放信息从而提高性能。<span lang=EN-US>CPL_NEWINQUIRE</span>仅当您需要根据计算机的状态来改变控制面板程序的图标和显示字符串时有用。<span
lang=EN-US> <br>
<br>
</span>当用户在控制面板中双击某个对话框所对应的图标时,<span lang=EN-US> CPlApplet</span>函数将收到一条<span
lang=EN-US>CPL_DBLCLK</span>消息,<span lang=EN-US>CPlApplet</span>函数可以收到该消息多次。该消息包含了对话框的标志和一个<span
lang=EN-US>lData</span>数据,<span lang=EN-US>CPlApplet</span>函数应该显示相应的对话框并且处理用户的输入。<span
lang=EN-US> <br>
<br>
</span>当控制面板关闭时,对应控制面板程序支持的每一个对话框,<span lang=EN-US> CPlApplet</span>函数将收到一条<span
lang=EN-US>CPL_STOP</span>消息。该消息包含了对话框的标志以及<span lang=EN-US>lData</span>数据,<span
lang=EN-US>CPlApplet</span>函数应该释放此对话框所占用的资源。<span lang=EN-US> <br>
<br>
</span>在最后一条<span lang=EN-US>CPL_STOP</span>消息之后,<span lang=EN-US> CPlApplet</span>将收到一条<span
lang=EN-US>CPL_EXIT</span>消息。此时应该释放此控制面板程序所占用的所有资源。在该消息返回之后,控制面板将调用<span
lang=EN-US>FreeLibrary </span>来释放控制面板程序动态连接库。<span lang=EN-US> <br>
<br>
</span>控制面板程序的安装<span lang=EN-US> <br>
<br>
</span>在编译连接输出文件名选项中将输出文件扩展名改为<span lang=EN-US>.CPL,</span>编译连接成功后将其拷贝到<span
lang=EN-US>windows</span>的<span lang=EN-US>SYSTEM</span>目录即可。<span
lang=EN-US> <br>
<br>
</span>示例程序:<span lang=EN-US> <br>
<br>
</span>该示例程序将显示一个对话框<span lang=EN-US>,</span>并且根据用户的输入改变系统注册表中相应的数据<span
lang=EN-US>.</span>按上小节所述的安装方法安装控制面板示例程序后,再次启动控制面板,在控制面板中将出现示例程序的图标,双击该图标后将弹出一个对话框。<span
lang=EN-US> <br>
<br>
<br>
</span>该程序使用<span lang=EN-US>Visual C </span>开发,从<span lang=EN-US>File</span>菜单选择<span
lang=EN-US>New</span>,再选择<span lang=EN-US>MFC AppWizard</span>,工程名称为<span
lang=EN-US>CPL</span>。单击<span lang=EN-US>OK</span>之后再选择<span lang=EN-US>MFC
Extention DLL</span>,这样,<span lang=EN-US>Visual C </span>将为我们创建一个包含资源文件,<span
lang=EN-US>DEF</span>文件的动态连接库工程。<span lang=EN-US> <br>
<br>
</span>在<span lang=EN-US>Visual C AppWizard</span>为我们创建的工程中,加入一个图标资源和字符串资源,<span
lang=EN-US>ID</span>分别为<span lang=EN-US>ID_ICON1</span>和<span lang=EN-US>ID_STRING1</span>,然后再加入一个图<span
lang=EN-US>2</span>所示对话框,其中有一个<span lang=EN-US>CheckBox</span>,<span
lang=EN-US>ID</span>为<span lang=EN-US>ID_CHECK1</span>。并且将工程的输出文件名改为<span
lang=EN-US>CDAUTO.CPL</span>,方法是选择<span lang=EN-US>Project</span>菜单的<span
lang=EN-US>Settings...</span>项,如图<span lang=EN-US>5</span>所示。以下是程序的清单。<span
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -