亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wtl for mfc programmers, part v.mht

?? 大家知道wtl是window UI庫
?? MHT
?? 第 1 頁 / 共 5 頁
字號:
    END_MSG_MAP()
=20
    BEGIN_UPDATE_UI_MAP(CMainDlg)
    END_UPDATE_UI_MAP()
<SPAN class=3Dcpp-comment>//...</SPAN>
};</PRE>
      <P>Notice that <CODE>CMainDlg</CODE> derives from =
<CODE>CUpdateUI</CODE>=20
      and has an update UI map. <CODE>OnInitDialog()</CODE> has this =
code, which=20
      again should be familiar from the earlier frame window =
examples:</P><PRE>    <SPAN class=3Dcpp-comment>// register object for =
message filtering and idle updates</SPAN>
    CMessageLoop* pLoop =3D _Module.GetMessageLoop();
    ATLASSERT(pLoop !=3D NULL);
    pLoop-&gt;AddMessageFilter(<SPAN class=3Dcpp-keyword>this</SPAN>);
    pLoop-&gt;AddIdleHandler(<SPAN class=3Dcpp-keyword>this</SPAN>);
=20
    UIAddChildWindowContainer(m_hWnd);</PRE>
      <P>This time, instead of <CODE>UIAddToolbar()</CODE> or=20
      <CODE>UIAddStatusBar()</CODE>, we call=20
      <CODE>UIAddChildWindowContainer()</CODE>. This tells=20
      <CODE>CUpdateUI</CODE> that our dialog contains child windows that =
will=20
      need updating. If you look at <CODE>OnIdle()</CODE>, you might =
suspect=20
      that something is missing:</P><PRE>BOOL CMainDlg::OnIdle()
{
    <SPAN class=3Dcpp-keyword>return</SPAN> FALSE;
}</PRE>
      <P>You might expect there to be another <CODE>CUpdateUI</CODE> =
method call=20
      here to do the actual updating, and you're right, there should be; =
the=20
      AppWizard left out a line of code. You need to add this line to=20
      <CODE>OnIdle()</CODE>:</P><PRE>BOOL CMainDlg::OnIdle()
{
    <B>UIUpdateChildWindows();</B>
    <SPAN class=3Dcpp-keyword>return</SPAN> FALSE;
}</PRE>
      <P>To demonstrate UI updating, when you click the left-hand bitmap =
button,=20
      the right-hand button is enabled or disabled. So first, we add an =
entry to=20
      the update UI map, using the flag <CODE>UPDUI_CHILDWINDOW</CODE> =
to=20
      indicate that the entry is for a child window:</P><PRE>    =
BEGIN_UPDATE_UI_MAP(CMainDlg)
        <B>UPDATE_ELEMENT(IDC_ALYSON_BMPBTN, UPDUI_CHILDWINDOW)</B>
    END_UPDATE_UI_MAP()</PRE>
      <P>Then in the handler for the left button, we call=20
      <CODE>UIEnable()</CODE> to toggle the enabled state of the other=20
      button:</P><PRE><SPAN class=3Dcpp-keyword>void</SPAN> =
CMainDlg::OnAlysonODBtn ( UINT uCode, <SPAN =
class=3Dcpp-keyword>int</SPAN> nID, HWND hwndCtrl )
{
<SPAN class=3Dcpp-keyword>static</SPAN> <SPAN =
class=3Dcpp-keyword>bool</SPAN> s_bBtnEnabled =3D <SPAN =
class=3Dcpp-keyword>true</SPAN>;

    s_bBtnEnabled =3D !s_bBtnEnabled;
    UIEnable ( IDC_ALYSON_BMPBTN, s_bBtnEnabled );
}</PRE>
      <H2><A name=3Dddv></A>DDV</H2>
      <P>WTL's dialog data validation (DDV) support is a bit simpler =
than MFC's.=20
      In MFC, you need create separate macros for DDX (to transfer the =
data to=20
      variables) and DDV (to validate the data). In WTL, one macro does =
both at=20
      the same time. WTL contains basic DDV support using three macros =
in the=20
      DDX map:</P>
      <DL>
        <DT><CODE>DDX_TEXT_LEN</CODE>=20
        <DD>Does DDX like <CODE>DDX_TEXT</CODE>, and verifies that the =
string's=20
        length (not counting the null terminator) is less than or equal =
to a=20
        specified limit.=20
        <DT><CODE>DDX_INT_RANGE</CODE> and <CODE>DDX_UINT_RANGE</CODE>=20
        <DD>These do DDX like <CODE>DDX_INT</CODE> and =
<CODE>DDX_UINT</CODE>,=20
        plus they verify that the number is between a given minimum and =
maximum.=20

        <DT><CODE>DDX_FLOAT_RANGE</CODE>=20
        <DD>Does DDX like <CODE>DDX_FLOAT</CODE> and verifies that the =
number is=20
        between a given minimum and maximum. </DD></DL>
      <P>ControlMania2 has an edit box with ID IDC_FAV_SEASON that is =
tied to=20
      the member variable <CODE>m_nSeason</CODE>.</P>
      <P><IMG height=3D429 alt=3D" [Season selector edit box - 13K] "=20
      src=3D"http://www.codeproject.com/wtl/WTL4MFC5/cm2_seasonedit.png" =
width=3D373=20
      align=3Dbottom border=3D0></P>
      <P>Since the legal values for the season are 1 to 7, the DDV macro =
looks=20
      like:</P><PRE>    BEGIN_DDX_MAP(CMainDlg)
    <SPAN class=3Dcpp-comment>//...</SPAN>
        DDX_INT_RANGE(IDC_FAV_SEASON, m_nSeason, <SPAN =
class=3Dcpp-literal>1</SPAN>, <SPAN class=3Dcpp-literal>7</SPAN>)
    END_DDX_MAP()</PRE>
      <P><CODE>OnOK()</CODE> calls <CODE>DoDataExchange()</CODE> to =
validate the=20
      season number. <CODE>m_nSeason</CODE> is filled in as part of the =
work=20
      done in <CODE>DoDataExchange()</CODE>.</P>
      <H3><A name=3Dddvfail></A>Handling DDV failures</H3>
      <P>If a control's data fails validation, =
<CODE>CWinDataExchange</CODE>=20
      calls the overridable function <CODE>OnDataValidateError()</CODE>. =
The=20
      default implementation just beeps the speaker, so you'll probably =
want to=20
      provide a friendlier indication of the error. The prototype of=20
      <CODE>OnDataValidateError()</CODE> is:</P><PRE><SPAN =
class=3Dcpp-keyword>void</SPAN> OnDataValidateError ( UINT nCtrlID, BOOL =
bSave, _XData&amp; data );</PRE>
      <P><CODE>_XData</CODE> is a struct that =
<CODE>CWinDataExchange</CODE>=20
      fills in with details about the data that was entered and the =
allowable=20
      range. Here's the definition of the struct:</P><PRE><SPAN =
class=3Dcpp-keyword>struct</SPAN> _XData
{
    _XDataType nDataType;
    <SPAN class=3Dcpp-keyword>union</SPAN>
    {
        _XTextData textData;
        _XIntData intData;
        _XFloatData floatData;
    };
};</PRE>
      <P><CODE>nDataType</CODE> indicates which of the three members of =
the=20
      union is meaningful. Its possible values are:</P><PRE><SPAN =
class=3Dcpp-keyword>enum</SPAN> _XDataType
{
    ddxDataNull =3D <SPAN class=3Dcpp-literal>0</SPAN>,
    ddxDataText =3D <SPAN class=3Dcpp-literal>1</SPAN>,
    ddxDataInt =3D <SPAN class=3Dcpp-literal>2</SPAN>,
    ddxDataFloat =3D <SPAN class=3Dcpp-literal>3</SPAN>,
    ddxDataDouble =3D <SPAN class=3Dcpp-literal>4</SPAN>
};</PRE>
      <P>In our case, <CODE>nDataType</CODE> will be =
<CODE>ddxDataInt</CODE>,=20
      which means that the <CODE>_XIntData</CODE> member in =
<CODE>_XData</CODE>=20
      is filled in. <CODE>_XIntData</CODE> is a simple =
struct:</P><PRE><SPAN class=3Dcpp-keyword>struct</SPAN> _XIntData
{
    <SPAN class=3Dcpp-keyword>long</SPAN> nVal;
    <SPAN class=3Dcpp-keyword>long</SPAN> nMin;
    <SPAN class=3Dcpp-keyword>long</SPAN> nMax;
};</PRE>
      <P>Our <CODE>OnDataValidateError()</CODE> override shows an error =
message=20
      telling the user what the allowable range is:</P><PRE><SPAN =
class=3Dcpp-keyword>void</SPAN> CMainDlg::OnDataValidateError ( UINT =
nCtrlID, BOOL bSave, _XData&amp; data )
{
CString sMsg;
=20
    sMsg.Format ( _T(<SPAN class=3Dcpp-string>"Enter a number between %d =
and %d"</SPAN>),
                  data.intData.nMin, data.intData.nMax );
=20
    MessageBox ( sMsg, _T(<SPAN =
class=3Dcpp-string>"ControlMania2"</SPAN>), MB_ICONEXCLAMATION );
=20
    ::SetFocus ( GetDlgItem(nCtrlID) );
}</PRE>
      <P>Check out atlddx.h to see the other types of data in an=20
      <CODE>_XData</CODE> struct - <CODE>_XTextData</CODE> and=20
      <CODE>_XFloatData</CODE>.</P>
      <H2><A name=3Dresizing></A>Resizing Dialogs</H2>
      <P>One of the first things about WTL that got my attention was its =

      built-in support for resizable dialogs. Some time ago, I wrote <A=20
      href=3D"http://www.codeproject.com/wtl/wtldlgresize.asp">an =
article on this=20
      subject</A>, so please refer to that article for more details. To=20
      summarize, you add the <CODE>CDialogResize</CODE> class to the =
dialog's=20
      inheritance list, call <CODE>DlgResize_Init()</CODE> in=20
      <CODE>OnInitDialog()</CODE>, then chain messages to=20
      <CODE>CDialogResize</CODE>.</P>
      <H2><A name=3Dupnext></A>Up Next</H2>
      <P>In the next article, we'll look at hosting ActiveX controls in =
dialogs,=20
      and how to handle events fired by the controls.</P>
      <H2><A name=3Dreferences></A>References</H2>
      <P><A =
href=3D"http://www.codeproject.com/wtl/wtldlgresize.asp">Using WTL's=20
      Built-in Dialog Resizing Class</A> - Michael Dunn</P>
      <P><A =
href=3D"http://www.codeproject.com/wtl/propsheetddx.asp">Using DDX and=20
      DDV with WTL</A> - Less Wright</P>
      <H2><A name=3Drevisionhistory></A>Revision History</H2>
      <P>April 28, 2003: Article first published.=20
</P><!-- Article Ends --></DIV>
      <H2>About Michael Dunn</H2>
      <TABLE width=3D"100%" border=3D0>
        <TBODY>
        <TR vAlign=3Dtop>
          <TD class=3DsmallText noWrap><IMG=20
            =
src=3D"http://www.codeproject.com/script/profile/images/{2D6F4A37-6FD0-4C=
EF-AC72-EA9D126E611E}.jpg"><BR><BR><IMG=20
            =
src=3D"http://www.codeproject.com/script/images/sitebuild_icon.gif">=20
            Site Builder</TD>
          <TD class=3DsmallText width=3D"100%">Michael lives in sunny =
Los Angeles,=20
            California, and is so spoiled by the weather that he will =
probably=20
            never be able to live anywhere else. He started programming =
with an=20
            Apple //e in 4th grade, graduated from <A=20
            href=3D"http://www.ucla.edu/">UCLA</A> with a math degree in =
1995, and=20
            immediately landed a job as a QA engineer at Symantec, =
working on=20
            the Norton AntiVirus team. He pretty much taught himself =
Windows and=20
            MFC programming, and in 1999 he designed and coded a new =
interface=20
            for Norton AntiVirus 2000.<BR><BR>Mike now works as a =
developer at=20
            <A href=3D"http://www.napster.com/">Napster</A>, an online=20
            subscription music service. He also developed <A=20
            href=3D"http://www.ultrabar.com/">UltraBar</A>, an IE =
toolbar plugin=20
            that makes web searching easy and trounces the Google =
toolbar; the=20
            <A href=3D"http://tinyurl.com/i6sk">CodeProject =
SearchBar</A>; and has=20
            co-founded <A =
href=3D"http://www.zabersoft.com/">Zabersoft</A>, a=20
            development company with offices in Los Angeles and Odense,=20
            Denmark.<BR><BR>He also enjoys his hobbies of playing =
pinball, bike=20
            riding, and the occasional PlayStation, Dreamcast, or MAME =
game. He=20
            is also sad that he's forgotten the languages he's studied: =
French,=20
            Mandarin Chinese, and Japanese.
            <P class=3DsmallText>Click <A=20
            =
href=3D"http://www.codeproject.com/script/profile/whos_who.asp?vt=3Darts&=
amp;id=3D152">here</A>=20
            to view Michael Dunn's online =
profile.</P></TD></TR></TBODY></TABLE><BR>
      <H2>Other popular WTL articles:</H2>
      <UL>
        <LI><A href=3D"http://www.codeproject.com/wtl/wtl4mfc2.asp">WTL =
for MFC=20
        Programmers, Part II - WTL GUI Base Classes</A><BR><SPAN=20
        class=3Dsmalltext>WTL programming for MFC developers - frame=20
windows</SPAN>
        <LI><A =
href=3D"http://www.codeproject.com/wtl/wtldockingwindows.asp">WTL=20
        Docking windows</A><BR><SPAN class=3Dsmalltext>This is an =
implementation=20
        of docking windows for the WTL library</SPAN>
        <LI><A href=3D"http://www.codeproject.com/wtl/wtl4mfc1.asp">WTL =
for MFC=20
        Programmers, Part I - ATL GUI Classes</A><BR><SPAN =
class=3Dsmalltext>An=20
        introduction to WTL programming for MFC developers</SPAN>
        <LI><A href=3D"http://www.codeproject.com/wtl/wtl4mfc4.asp">WTL =
for MFC=20
        Programmers, Part IV - Dialogs and Controls</A><BR><SPAN=20
        class=3Dsmalltext>Using dialogs and controls in =
WTL</SPAN></LI></UL>
      <FORM action=3D/script/rating/code/app/insert_vote.asp =
method=3Dpost><INPUT=20
      type=3Dhidden value=3DWTL4MFC5/wtl4/27/2003 name=3Dvote_name> =
<INPUT type=3Dhidden=20
      value=3D/wtl/wtl4mfc5.asp name=3Dgoal>=20
      <TABLE cellSpacing=3D0 cellPadding=3D1 width=3D"100%" =
bgColor=3D#ff9900=20
        border=3D0><TBODY>
        <TR>
          <TD width=3D"100%">
            <TABLE cellSpacing=3D0 cellPadding=3D4 width=3D"100%" =
bgColor=3D#fbedbb=20
            border=3D0>
              <TBODY>
              <TR>
                <TD class=3Dsmalltext vAlign=3Dcenter>[<A=20
                  =
href=3D"http://www.codeproject.com/wtl/wtl4mfc5.asp#__top">Top</A>]</TD>
                <TD vAlign=3Dcenter noWrap align=3Dright><I><B>Rate this =
Article=20
                  for us!</B></I>&nbsp;&nbsp;&nbsp;&nbsp; =
<I>Poor</I><INPUT=20
                  type=3Dradio value=3D1 name=3Drate><INPUT type=3Dradio =
value=3D2=20
                  name=3Drate><INPUT type=3Dradio value=3D3 =
name=3Drate><INPUT=20
                  type=3Dradio value=3D4 name=3Drate><INPUT type=3Dradio =
value=3D5=20
                  name=3Drate><I>Excellent</I>&nbsp;&nbsp;<INPUT =
class=3DFormButton type=3Dsubmit value=3DVote>=20
                =
</TD></TR></TBODY></TABLE></TD></TR

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品免费观看| 欧美优质美女网站| 亚洲国产精品一区二区www| 日韩视频123| 91丨国产丨九色丨pron| 亚洲成a人在线观看| 久久精品视频在线看| 欧美人与禽zozo性伦| 99re成人在线| 国产精品一区二区男女羞羞无遮挡| 中文字幕亚洲电影| 精品国产露脸精彩对白 | 亚洲福利一区二区| 欧美激情在线免费观看| 欧美电影免费观看高清完整版在| 欧洲视频一区二区| 大白屁股一区二区视频| 精品在线你懂的| 日韩激情视频在线观看| 亚洲猫色日本管| 国产精品久久久久久福利一牛影视 | 在线视频亚洲一区| 成人av在线网站| 国产精品一线二线三线精华| 蜜臀精品久久久久久蜜臀| 一区二区高清免费观看影视大全 | 一区二区国产视频| 亚洲欧洲性图库| 久久久99精品久久| 久久婷婷国产综合精品青草| 日韩亚洲欧美综合| 91精品国产91热久久久做人人 | 亚洲成人av电影| 亚洲激情图片qvod| 日韩一区在线免费观看| 国产精品免费丝袜| 国产精品亲子伦对白| 国产精品久久久久影院老司| 国产精品网友自拍| 国产精品短视频| 亚洲欧洲三级电影| 18涩涩午夜精品.www| 日韩一区中文字幕| 一区二区三区在线不卡| 亚洲综合一区在线| 午夜精品久久久久影视| 亚洲v中文字幕| 秋霞午夜av一区二区三区| 日本免费新一区视频| 九九国产精品视频| 国产成人午夜99999| 国产99久久久国产精品潘金网站| 国产91精品久久久久久久网曝门 | 成人动漫精品一区二区| jiyouzz国产精品久久| 一本大道av一区二区在线播放| 99久精品国产| 在线观看一区二区视频| 欧美高清www午色夜在线视频| 91精品国产色综合久久ai换脸 | 久久国产剧场电影| 国产一区二区三区美女| 成人h版在线观看| 91福利在线观看| 欧美一三区三区四区免费在线看| 欧美电影免费提供在线观看| 久久综合九色综合久久久精品综合 | 日本福利一区二区| 欧美精品1区2区3区| 日韩美女视频一区二区在线观看| 国产亚洲综合在线| 一区二区免费看| 丝袜亚洲另类丝袜在线| 国产在线视频不卡二| 9久草视频在线视频精品| 91成人在线观看喷潮| 日韩三级.com| 欧美激情资源网| 亚洲一区二区三区小说| 美女视频网站黄色亚洲| fc2成人免费人成在线观看播放| 欧美亚洲高清一区二区三区不卡| 日韩亚洲国产中文字幕欧美| 国产精品欧美经典| 午夜视频在线观看一区| 国产精品中文字幕日韩精品| 色噜噜偷拍精品综合在线| 91丨九色丨国产丨porny| 欧美日韩免费观看一区二区三区| 久久一夜天堂av一区二区三区| 亚洲视频中文字幕| 经典一区二区三区| 欧美性高清videossexo| 久久久五月婷婷| 午夜久久久久久| 懂色av一区二区夜夜嗨| 欧美日本在线观看| 中文字幕在线不卡一区二区三区| 亚洲h精品动漫在线观看| 成人免费视频caoporn| 日韩三级中文字幕| 一二三四区精品视频| 成人在线视频首页| 欧美三级在线看| 日本一区二区三区四区在线视频 | 国产真实乱子伦精品视频| 99这里只有久久精品视频| 欧美一区二区成人| 一区二区三区**美女毛片| 韩国一区二区三区| 91麻豆精品国产91久久久久久久久| 《视频一区视频二区| 麻豆精品一区二区av白丝在线| 91美女在线视频| 国产精品欧美极品| 国产精品一区二区三区网站| 欧美一区二区三区在线电影| 一区二区激情视频| 不卡的电影网站| 国产日韩三级在线| 麻豆国产一区二区| 欧美精三区欧美精三区| 一区二区三区久久久| 91免费在线看| 亚洲色图20p| kk眼镜猥琐国模调教系列一区二区| 久久精品视频免费| 国产精品资源在线| 国产亚洲精品免费| 国内精品免费**视频| 日韩欧美一二三区| 日本特黄久久久高潮| 5858s免费视频成人| 五月婷婷久久综合| 欧美性受极品xxxx喷水| 亚洲高清在线视频| 在线观看免费视频综合| 亚洲精品国产高清久久伦理二区| 白白色 亚洲乱淫| 中文字幕一区二区三区视频| 99精品在线免费| 亚洲人快播电影网| 在线观看不卡视频| 亚洲成av人影院| 欧美久久一二区| 美女视频一区在线观看| 欧美va日韩va| 国产高清成人在线| 国产精品久久三区| 91国产免费看| 亚洲成人中文在线| 日韩欧美电影在线| 国产真实精品久久二三区| 国产欧美日韩精品在线| 99re这里只有精品6| 亚洲午夜精品网| 日韩午夜激情av| 国产精品一区三区| 国产精品福利影院| 欧美天堂亚洲电影院在线播放| 天天综合色天天综合色h| 日韩欧美aaaaaa| 国产成人av资源| 亚洲免费视频中文字幕| 欧美妇女性影城| 国产麻豆成人传媒免费观看| 国产精品久久久久影院老司 | 精品一区二区免费看| 久久久欧美精品sm网站| 94色蜜桃网一区二区三区| 亚洲国产精品久久人人爱蜜臀| 7777精品伊人久久久大香线蕉 | 一本久道中文字幕精品亚洲嫩 | 亚洲超丰满肉感bbw| 日韩欧美资源站| 国产99久久久国产精品潘金网站| 一区二区三区四区蜜桃| 日韩一区二区在线观看视频 | 欧美日韩精品电影| 国产原创一区二区| 一区二区三区四区五区视频在线观看| 制服丝袜中文字幕一区| 国产成人在线视频网站| 亚洲国产视频a| 久久影视一区二区| 欧美日韩综合色| 国产精品自拍网站| 亚洲黄色小说网站| 久久婷婷色综合| 欧美精品v日韩精品v韩国精品v| 国产一区91精品张津瑜| 亚洲国产视频网站| 久久网站最新地址| 欧美精品欧美精品系列| 成人av在线影院| 美女高潮久久久| 一区二区三区成人在线视频| 国产亚洲综合av| 日韩一区和二区| 欧美在线观看你懂的|