📄 ch05.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>Teach Yourself Visual C++® 5 in 24 Hours -- Hour 5 -- Button Controls</TITLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF">
<CENTER>
<H1><IMG SRC="sams.gif" tppabs="http://www.mcp.com/824169600/0-672/0-672-31242-5/button/sams.gif" WIDTH="171" HEIGHT="66" ALIGN="BOTTOM" BORDER="0"><BR>
<FONT COLOR="#000077">Teach Yourself Visual C++® 5 in 24 Hours</FONT></H1>
</CENTER>
<CENTER>
<P><A HREF="ch04.htm" tppabs="http://www.mcp.com/824169600/0-672/0-672-31242-5/ch04/ch04.htm"><IMG SRC="previous.gif" tppabs="http://www.mcp.com/824169600/0-672/0-672-31242-5/button/previous.gif" WIDTH="128" HEIGHT="28"
ALIGN="BOTTOM" ALT="Previous chapter" BORDER="0"></A><A HREF="ch06.htm" tppabs="http://www.mcp.com/824169600/0-672/0-672-31242-5/ch06/ch06.htm"><IMG
SRC="next.gif" tppabs="http://www.mcp.com/824169600/0-672/0-672-31242-5/button/next.gif" WIDTH="128" HEIGHT="28" ALIGN="BOTTOM" ALT="Next chapter"
BORDER="0"></A><A HREF="index-1.htm" tppabs="http://www.mcp.com/824169600/0-672/0-672-31242-5/index.htm"><IMG SRC="contents.gif" tppabs="http://www.mcp.com/824169600/0-672/0-672-31242-5/button/contents.gif" WIDTH="128"
HEIGHT="28" ALIGN="BOTTOM" ALT="Contents" BORDER="0"></A>
<HR>
</CENTER>
<CENTER>
<H1><FONT COLOR="#000077">- Hour 5 -<BR>
Button Controls</FONT></H1>
</CENTER>
<P>Button controls are probably the most flexible controls available in Windows.
Before learning about buttons, though, it's important to begin with a short lesson
about conditional expressions in C++ programs. In this hour you will also learn about
<UL>
<LI>Using the different types of button controls provided by Windows<BR>
<BR>
<LI>Using the MFC <TT>CButton</TT> class that is used to manage button controls<BR>
<BR>
<LI>Using the MFC <TT>CWnd</TT> class to enable and disable controls
</UL>
<P>Later this hour, you will add each type of button to a dialog box-based project.
You will also use ClassWizard to add button events and member variables for the dialog
box's button controls.
<H2><FONT COLOR="#000077"><B>What Are Conditional Expressions?</B></FONT></H2>
<P><FONT COLOR="#000077"><B>New Term:</B></FONT><B> </B>A <I>conditional expression</I>
is an expression that results in a <TT>true</TT> or <TT>false</TT> value.</P>
<P>Most programs exercise some type of control over their execution flow using conditional
expressions. They perform different actions based on varying conditions as the execution
progresses. Then, they repeat these actions until all their tasks are complete. For
example, a Windows program might need to search for a certain record from a database,
or might take different actions depending on the messages that are sent to it.</P>
<P><FONT COLOR="#000077"><B>New Term:</B></FONT><B> </B>A <I>selection statement</I>
uses a conditional expression to pick a particular path of execution in your program.
This is similar to choosing a fork in the road.</P>
<P><FONT COLOR="#000077"><B>New Term:</B></FONT><B> </B>A <I>sequence statement </I>uses
a conditional expression to determine how often to execute a part of your program.
<H3><FONT COLOR="#000077"><B>Selecting an Execution Path with Selection Statements</B></FONT></H3>
<P>The first set of control statements to look at are the selection statements. If
your program must take a particular action only if a certain condition is <TT>true</TT>,
or if a user must make a choice from a list of possible items, these statements are
for you.
<BLOCKQUOTE>
<P>
<HR>
<FONT COLOR="#000077"><B>Just a Minute:</B></FONT><B> </B>All selection statements
work by evaluating an expression, then taking an action based on the value of that
expression.
<HR>
</BLOCKQUOTE>
<H4><FONT COLOR="#000077">Using the if Statement</FONT></H4>
<P>The <TT>if</TT> statement enables one or more statements to be executed only if
an expression inside the parentheses is <TT>true</TT>. If necessary, values inside
the parentheses are converted into Boolean values, with zero being converted to <TT>false</TT>
and all non-zero values converted to <TT>true</TT>.</P>
<P>Listing 5.1 provides a function that shows how the <TT>if</TT> statement is used.
If the parameter passed to the function is greater than zero, the function returns
a value of <TT>true</TT>.
<H4><FONT COLOR="#000077">TYPE: Listing 5.1. A function that returns true if a positive
number is passed to it.</FONT></H4>
<PRE><FONT COLOR="#0066FF"><TT>bool IsPositive( int nCheckValue )</TT>
<TT>{</TT>
<TT> bool bReturn = false;</TT>
<TT> if( nCheckValue > 0 )</TT>
<TT> bReturn = true;</TT>
<TT> return bReturn;</TT>
</FONT></PRE>
<P><TT>}</TT>
<H4><FONT COLOR="#000077">Using Compound Statements</FONT></H4>
<P>The statement controlled by an <TT>if</TT> statement is executed only when the
test condition is <TT>true</TT>. If more than one statement must be executed, group
the statements together to form a compound statement. Compound statements are often
called <I>blocks</I> because they group statements into blocks of code.</P>
<P>A compound statement begins and ends with curly braces, just like a function body.
All the statements within a compound statement that follows an <TT>if</TT> statement
are executed when the test condition is <TT>true</TT>, as shown in Listing 5.2.
<H4><FONT COLOR="#000077">TYPE: Listing 5.2. Using a compound statement to group
several statements together.</FONT></H4>
<PRE><FONT COLOR="#0066FF"><TT>void PrintTest(bool bShouldPrint)</TT>
<TT>{</TT>
<TT> if( bShouldPrint == true )</TT>
<TT> {</TT>
<TT> cout << "A short demonstration of" << endl;</TT>
<TT> cout << "a compound statement - also" << endl;</TT>
<TT> cout << "known as a block." << endl;</TT>
<TT> }</TT>
</FONT></PRE>
<P><TT>}</TT> In Listing 5.2, the test for equality is made using <TT>==</TT>, the
equality operator.
<BLOCKQUOTE>
<P>
<HR>
<FONT COLOR="#000077"><B>CAUTION:</B></FONT><B> </B>A common mistake is to use <TT>=</TT>,
which is the assignment operator.
<HR>
</BLOCKQUOTE>
<P>A standard code-formatting convention is to visually nest each conditional "level"
of your source code by indenting statements, as in Listings 5.1 and 5.2. Indentation
helps make your code more readable because it helps make the flow of control in your
source code easy to see.
<H4><FONT COLOR="#000077">Using else with if Statements</FONT></H4>
<P>You can couple an <TT>else</TT> statement with an <TT>if</TT> statement to create
an either/or selection. When the expression tested by the <TT>if</TT> statement is
<TT>true</TT>, the first statement (or block statement) is executed. When the expression
is <TT>false</TT>, the statements grouped with the <TT>else</TT> statement are executed
instead.</P>
<P>Listing 5.3 provides an example of a function that uses the <TT>if</TT> and <TT>else</TT>
statements. This function always returns the larger of two parameters passed to it.
<H4><FONT COLOR="#000077">TYPE: Listing 5.3. A function that uses the if and else
statements.</FONT></H4>
<PRE><FONT COLOR="#0066FF"><TT>int GetMax( int nFirst, int nLast )</TT>
<TT>{</TT>
<TT> int nReturn;</TT>
<TT> if( nFirst > nLast )</TT>
<TT> nReturn = nFirst;</TT>
<TT> else</TT>
<TT> nReturn = nLast;</TT>
<TT> return nReturn;</TT>
</FONT></PRE>
<P><TT>}</TT>
<H4><FONT COLOR="#000077">Using the switch Statement</FONT></H4>
<P>Sometimes you must choose between more than just one or two alternatives. Suppose
you are implementing a simple menu function with three choices. If you use the <TT>if</TT>
statement, you might wind up with a function like the one shown in Listing 5.4.
<H4><FONT COLOR="#000077">TYPE: Listing 5.4. A menu-selection function.</FONT></H4>
<PRE><FONT COLOR="#0066FF"><TT>//</TT>
<TT>// Processes a selection from a character-based menu. If a</TT>
<TT>// valid selection is made, the proper functions are called,</TT>
<TT>// and true is returned. If an invalid selection is made,</TT>
<TT>// false is returned.</TT>
<TT>bool HandleMenuSelection( char chSelection )</TT>
<TT>{</TT>
<TT> bool bValidSelection = true;</TT>
<TT> if( chSelection == `F' )</TT>
<TT> OpenNewFile();</TT>
<TT> else if( chSelection == `P' )</TT>
<TT> PrintDocument();</TT>
<TT> else if( chSelection == `S' )</TT>
<TT> SaveFile();</TT>
<TT> else</TT>
<TT> bValidSelection = false;</TT>
<TT> return bValidSelection;</TT>
<TT>}</TT> </FONT></PRE>
<P>This is already starting to look a little cluttered, but how bad would it look
if you had a few more selections? What if you had 20 or 30? The solution is to use
the <TT>switch</TT> statement. A <TT>switch</TT> statement evaluates an expression
and then chooses from a list of choices, as shown in Listing 5.5.
<H4><FONT COLOR="#000077">TYPE: Listing 5.5. Using the switch statement.</FONT></H4>
<PRE><FONT COLOR="#0066FF"><TT>bool HandleMenuSelection( char chSelection )</TT>
<TT>{</TT>
<TT> bool bValidSelection = true;</TT>
<TT> switch( chSelection )</TT>
<TT> {</TT>
<TT> case `F':</TT>
<TT> OpenNewFile();</TT>
<TT> break;</TT>
<TT> case `P':</TT>
<TT> PrintDocument();</TT>
<TT> break;</TT>
<TT> case `S':</TT>
<TT> SaveFile();</TT>
<TT> break;</TT>
<TT> default:</TT>
<TT> bValidSelection = false;</TT>
<TT> }</TT>
<TT> return bValidSelection;</TT>
<TT>}</TT> </FONT></PRE>
<P>As Listing 5.5 shows, the <TT>switch</TT> statement has several different parts.
Here are the major features of a <TT>switch</TT> statement:
<UL>
<LI>The <TT>switch()</TT> expression. The expression contained inside the <TT>switch</TT>
parentheses is evaluated, and its value is used as the basis for making the selection.<BR>
<BR>
<LI>One or more <TT>case</TT> labels. Each <TT>case</TT> label includes a value.
Every <TT>case</TT> label must be unique. If a <TT>case</TT> label's value matches
the <TT>switch</TT> expression, the statements after the <TT>case</TT> label are
executed.<BR>
<BR>
<LI>One or more <TT>break</TT> statements. The <TT>break</TT> statement is used to
stop execution inside a <TT>switch</TT> statement. A <TT>break</TT> statement is
normally placed between every <TT>case</TT>. If a <TT>break</TT> statement is removed,
statements in the next <TT>case</TT> are executed until a <TT>break</TT> is reached,
or until no more statements remain inside the <TT>switch</TT>.<BR>
<BR>
<LI>A default label. The default label is selected when no <TT>case</TT> labels match
the <TT>switch</TT> expression.
</UL>
<H2><FONT COLOR="#000077"><B>What Is a Button?</B></FONT></H2>
<P><FONT COLOR="#000077"><B>New Term:</B></FONT><B> </B>A <I>button</I> is a special
type of window that contains a text or bitmap label, usually found in a dialog box,
toolbar, or other window containing controls.</P>
<P>Five different types of buttons are provided by Windows:
<UL>
<LI><I>Pushbuttons</I> have a raised, three-dimensional appearance and seem to be
depressed as they are clicked with the mouse. Pushbuttons normally have a text label
on the face of the control.<BR>
<BR>
<LI><I>Radio buttons</I> consist of a round button with a label adjacent to it.<BR>
<BR>
<LI><I>Check boxes</I> are made up of a square box that contains a check mark when
selected and a label next to the control.<BR>
<BR>
<LI><I>Owner-drawn</I> buttons are painted by the button's owner instead of by Windows.<BR>
<BR>
<LI><I>Group boxes</I> are simply rectangles that are used to surround other controls
that have a common purpose.
</UL>
<P>In general, buttons are used to indicate a user selection. Buttons are used in
Windows programs because they are convenient and easy for users to operate. Users
have come to expect buttons to be presented in a large number of cases, especially
when dialog boxes are present in a program.
<H3><FONT COLOR="#000077"><B>What Are Pushbuttons?</B></FONT></H3>
<P>Almost every dialog box has at least one pushbutton control to indicate actions
that a user can invoke. Some common uses for pushbuttons include closing a dialog
box, beginning a search, or asking for help.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -