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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? wtl for mfc programmers, part iv.mht

?? 大家知道wtl是window UI庫
?? MHT
?? 第 1 頁 / 共 5 頁
字號:
use.</P><PRE>CMainDlg::CMainDlg() : m_wndOKBtn(<SPAN =
class=3Dcpp-keyword>this</SPAN>, <SPAN class=3Dcpp-literal>1</SPAN>),=20
                       m_wndExitBtn(<SPAN =
class=3Dcpp-keyword>this</SPAN>, <SPAN class=3Dcpp-literal>2</SPAN>)
{
}</PRE>
      <P>The constructor parameters are a <CODE>CMessageMap*</CODE> and =
an=20
      <CODE>ALT_MSG_MAP</CODE> section number. The first parameter will =
usually=20
      be <CODE><SPAN class=3Dcpp-keyword>this</SPAN></CODE>, meaning =
that the=20
      dialog's own message map will be used, and the second parameter =
tells the=20
      object which <CODE>ALT_MSG_MAP</CODE> section it should send its =
messages=20
      to.</P>
      <P>Finally, we associate each <CODE>CContainedWindow</CODE> with a =

      control.</P><PRE>LRESULT CMainDlg::OnInitDialog(...)
{
<SPAN class=3Dcpp-comment>// ...</SPAN>
    <SPAN class=3Dcpp-comment>// Attach CContainedWindows to OK and Exit =
buttons</SPAN>
    m_wndOKBtn.SubclassWindow ( GetDlgItem(IDOK) );
    m_wndExitBtn.SubclassWindow ( GetDlgItem(IDCANCEL) );
=20
    <SPAN class=3Dcpp-keyword>return</SPAN> TRUE;
}</PRE>
      <P>Here are the new <CODE>WM_SETCURSOR</CODE> =
handlers:</P><PRE>LRESULT CMainDlg::OnSetCursor_OK (
    HWND hwndCtrl, UINT uHitTest, UINT uMouseMsg )
{
<SPAN class=3Dcpp-keyword>static</SPAN> HCURSOR hcur =3D LoadCursor ( =
NULL, IDC_HAND );
=20
    <SPAN class=3Dcpp-keyword>if</SPAN> ( NULL !=3D hcur )
        {
        SetCursor ( hcur );
        <SPAN class=3Dcpp-keyword>return</SPAN> TRUE;
        }
    <SPAN class=3Dcpp-keyword>else</SPAN>
        {
        SetMsgHandled(<SPAN class=3Dcpp-keyword>false</SPAN>);
        <SPAN class=3Dcpp-keyword>return</SPAN> FALSE;
        }
}
=20
LRESULT CMainDlg::OnSetCursor_Exit (
    HWND hwndCtrl, UINT uHitTest, UINT uMouseMsg )
{
<SPAN class=3Dcpp-keyword>static</SPAN> HCURSOR hcur =3D LoadCursor ( =
NULL, IDC_NO );
=20
    <SPAN class=3Dcpp-keyword>if</SPAN> ( NULL !=3D hcur )
        {
        SetCursor ( hcur );
        <SPAN class=3Dcpp-keyword>return</SPAN> TRUE;
        }
    <SPAN class=3Dcpp-keyword>else</SPAN>
        {
        SetMsgHandled(<SPAN class=3Dcpp-keyword>false</SPAN>);
        <SPAN class=3Dcpp-keyword>return</SPAN> FALSE;
        }
}</PRE>
      <P>If you wanted to use <CODE>CButton</CODE> features, you could =
declare=20
      the variables as:</P><PRE>    CContainedWindowT&lt;CButton&gt; =
m_wndOKBtn;</PRE>
      <P>and then the <CODE>CButton</CODE> methods would be =
available.</P>
      <P>You can see the <CODE>WM_SETCURSOR</CODE> handlers in action =
when you=20
      move the cursor over the buttons:</P>
      <P><IMG height=3D220 alt=3D" [OK button cursor - 5K] "=20
      src=3D"http://www.codeproject.com/wtl/WTL4MFC4/okbtncur.png" =
width=3D333=20
      align=3Dbottom border=3D0> <IMG height=3D220 alt=3D" [Exit button =
cursor - 5K] "=20
      src=3D"http://www.codeproject.com/wtl/WTL4MFC4/exitbtncur.png" =
width=3D333=20
      align=3Dbottom border=3D0></P>
      <H3><A name=3Datl3></A>ATL Way 3 - Subclassing</H3>
      <P>Method 3 involves creating a <CODE>CWindowImpl</CODE>-derived =
class and=20
      using it to subclass a control. This is similar to method 2, =
however the=20
      message handlers go in the <CODE>CWindowImpl</CODE> class instead =
of the=20
      dialog class.</P>
      <P>ControlMania1 uses this method to subclass the <I>About</I> =
button in=20
      the main dialog. Here is the <CODE>CButtonImpl</CODE> class, which =
is=20
      derived from <CODE>CWindowImpl</CODE> and handles=20
      <CODE>WM_SETCURSOR</CODE>:</P><PRE><SPAN =
class=3Dcpp-keyword>class</SPAN> CButtonImpl : <SPAN =
class=3Dcpp-keyword>public</SPAN> CWindowImpl&lt;CButtonImpl, =
CButton&gt;
{
    BEGIN_MSG_MAP_EX(CButtonImpl)
        MSG_WM_SETCURSOR(OnSetCursor)
    END_MSG_MAP()
=20
    LRESULT OnSetCursor(HWND hwndCtrl, UINT uHitTest, UINT uMouseMsg)
    {
    <SPAN class=3Dcpp-keyword>static</SPAN> HCURSOR hcur =3D LoadCursor =
( NULL, IDC_SIZEALL );
=20
        <SPAN class=3Dcpp-keyword>if</SPAN> ( NULL !=3D hcur )
            {
            SetCursor ( hcur );
            <SPAN class=3Dcpp-keyword>return</SPAN> TRUE;
            }
        <SPAN class=3Dcpp-keyword>else</SPAN>
            {
            SetMsgHandled(<SPAN class=3Dcpp-keyword>false</SPAN>);
            <SPAN class=3Dcpp-keyword>return</SPAN> FALSE;
            }
    }
};</PRE>
      <P>Then in the main dialog, we declare a <CODE>CButtonImpl</CODE> =
member=20
      variable:</P><PRE><SPAN class=3Dcpp-keyword>class</SPAN> CMainDlg =
: <SPAN class=3Dcpp-keyword>public</SPAN> CDialogImpl&lt;CMainDlg&gt;
{
<SPAN class=3Dcpp-comment>// ...</SPAN>
<SPAN class=3Dcpp-keyword>protected</SPAN>:
    CContainedWindow m_wndOKBtn, m_wndExitBtn;
    <B>CButtonImpl m_wndAboutBtn;</B>
};</PRE>
      <P>And finally, in <CODE>OnInitDialog()</CODE>, we subclass the=20
button.</P><PRE>LRESULT CMainDlg::OnInitDialog(...)
{
<SPAN class=3Dcpp-comment>// ...</SPAN>
    <SPAN class=3Dcpp-comment>// Attach CContainedWindows to OK and Exit =
buttons</SPAN>
    m_wndOKBtn.SubclassWindow ( GetDlgItem(IDOK) );
    m_wndExitBtn.SubclassWindow ( GetDlgItem(IDCANCEL) );
=20
    <B><SPAN class=3Dcpp-comment>// CButtonImpl: subclass the About =
button</SPAN>
    m_wndAboutBtn.SubclassWindow ( GetDlgItem(ID_APP_ABOUT) );</B>
=20
    <SPAN class=3Dcpp-keyword>return</SPAN> TRUE;
}</PRE>
      <H3><A name=3Dwtlway></A>The WTL Way - DDX</H3>
      <P>WTL's DDX (dialog data exchange) support works a lot like =
MFC's, and it=20
      can rather painlessly connect a variable to a control. To begin, =
you need=20
      a <CODE>CWindowImpl</CODE>-derived class as in the previous =
example. We'll=20
      be using a new class this time, <CODE>CEditImpl</CODE>, since this =
example=20
      will subclass the edit control. You also need to #include atlddx.h =
in=20
      stdafx.h to get the DDX code.</P>
      <P>To add DDX support to <CODE>CMainDlg</CODE>, add=20
      <CODE>CWinDataExchange</CODE> to the inheritance =
list:</P><PRE><SPAN class=3Dcpp-keyword>class</SPAN> CMainDlg : <SPAN =
class=3Dcpp-keyword>public</SPAN> CDialogImpl&lt;CMainDlg&gt;,=20
                 <B><SPAN class=3Dcpp-keyword>public</SPAN> =
CWinDataExchange&lt;CMainDlg&gt;</B>
{
<SPAN class=3Dcpp-comment>//...</SPAN>
};</PRE>
      <P>Next you create a DDX map in the class, which is similar to the =

      <CODE>DoDataExchange()</CODE> function that the ClassWizard =
generates in=20
      MFC apps. There are several <CODE>DDX_*</CODE> macros for varying =
types of=20
      data; the one we'll use here is <CODE>DDX_CONTROL</CODE> to =
connect a=20
      variable with a control. This time, we'll use =
<CODE>CEditImpl</CODE> that=20
      handles <CODE>WM_CONTEXTMENU</CODE> to do something when you =
right-click=20
      in the control.</P><PRE><SPAN class=3Dcpp-keyword>class</SPAN> =
CEditImpl : <SPAN class=3Dcpp-keyword>public</SPAN> =
CWindowImpl&lt;CEditImpl, CEdit&gt;
{
    BEGIN_MSG_MAP_EX(CEditImpl)
        MSG_WM_CONTEXTMENU(OnContextMenu)
    END_MSG_MAP()
=20
    <SPAN class=3Dcpp-keyword>void</SPAN> OnContextMenu ( HWND hwndCtrl, =
CPoint ptClick )
    {
        MessageBox(<SPAN class=3Dcpp-string>"Edit control handled =
WM_CONTEXTMENU"</SPAN>);
    }
};
=20
<SPAN class=3Dcpp-keyword>class</SPAN> CMainDlg : <SPAN =
class=3Dcpp-keyword>public</SPAN> CDialogImpl&lt;CMainDlg&gt;,=20
                 <SPAN class=3Dcpp-keyword>public</SPAN> =
CWinDataExchange&lt;CMainDlg&gt;
{
<SPAN class=3Dcpp-comment>//...</SPAN>
=20
    <B>BEGIN_DDX_MAP(CMainDlg)
        DDX_CONTROL(IDC_EDIT, m_wndEdit)
    END_DDX_MAP()</B>
=20
<SPAN class=3Dcpp-keyword>protected</SPAN>:
    CContainedWindow m_wndOKBtn, m_wndExitBtn;
    CButtonImpl m_wndAboutBtn;<B>
</B>    <B>CEditImpl   m_wndEdit;</B>
};</PRE>
      <P>Finally, in <CODE>OnInitDialog()</CODE>, we call the=20
      <CODE>DoDataExchange()</CODE> function that is inherited from=20
      <CODE>CWinDataExchange</CODE>. The first time=20
      <CODE>DoDataExchange()</CODE> is called, it subclasses controls as =

      necessary. So in this example, <CODE>DoDataExchange()</CODE> will =
subclass=20
      the control with ID IDC_EDIT, and connect it to the variable=20
      <CODE>m_wndEdit</CODE>.</P><PRE>LRESULT =
CMainDlg::OnInitDialog(...)
{
<SPAN class=3Dcpp-comment>// ...</SPAN>
    <SPAN class=3Dcpp-comment>// Attach CContainedWindows to OK and Exit =
buttons</SPAN>
    m_wndOKBtn.SubclassWindow ( GetDlgItem(IDOK) );
    m_wndExitBtn.SubclassWindow ( GetDlgItem(IDCANCEL) );
=20
    <SPAN class=3Dcpp-comment>// CButtonImpl: subclass the About =
button</SPAN>
    m_wndAboutBtn.SubclassWindow ( GetDlgItem(ID_APP_ABOUT) );
=20
    <B><SPAN class=3Dcpp-comment>// First DDX call, hooks up variables =
to controls.</B></SPAN>
    <B>DoDataExchange(<SPAN class=3Dcpp-keyword>false</SPAN>);</B>
=20
    <SPAN class=3Dcpp-keyword>return</SPAN> TRUE;
}</PRE>
      <P>The parameter to <CODE>DoDataExchange()</CODE> has the same =
meaning as=20
      the parameter to MFC's <CODE>UpdateData()</CODE> function. We'll =
cover=20
      that in more detail in the next section.</P>
      <P>If you run the ControlMania1 project, you can see all this =
subclassing=20
      in action. Right-clicking in the edit box will pop up the message =
box, and=20
      the cursor will change shape over the buttons as shown =
earlier.</P>
      <H2><A name=3Dmoreddx></A>More on DDX</H2>
      <P>DDX can, of course, actually do data exchange too. WTL supports =

      exchanging string data between an edit box and a string variable. =
It can=20
      also parse a string as a number, and transfer that data between an =
integer=20
      or floating-point variable. And it also supports transferring the =
state of=20
      a check box or group of radio buttons to/from an <CODE><SPAN=20
      class=3Dcpp-keyword>int</SPAN></CODE>.</P>
      <H3><A name=3Dddxmacros></A>DDX macros</H3>
      <P>There are six macros used in DDX. Each one expands to a=20
      <CODE>CWinDataExchange</CODE> method call that does the work. The =
macros=20
      all have the general form: <CODE>DDX_FOO(controlID, =
variable)</CODE>. Each=20
      macro takes a different type of variable, and some like=20
      <CODE>DDX_TEXT</CODE> are overloaded to accept many types.</P>
      <DL>
        <DT><CODE>DDX_TEXT</CODE>=20
        <DD>Transfers text data to/from an edit box. The variable can be =
a=20
        <CODE>CString</CODE>, <CODE>BSTR</CODE>, <CODE>CComBSTR</CODE>, =
or=20
        statically-allocated character array. Using an array allocated =
with=20
        <CODE><SPAN class=3Dcpp-keyword>new</SPAN></CODE> will not work. =

        <DT><CODE>DDX_INT</CODE>=20
        <DD>Transfers numerical data between an edit box and an =
<CODE><SPAN=20
        class=3Dcpp-keyword>int</SPAN></CODE>.=20
        <DT><CODE>DDX_UINT</CODE>=20
        <DD>Transfers numerical data between an edit box and an =
<CODE><SPAN=20
        class=3Dcpp-keyword>unsigned</SPAN> <SPAN=20
        class=3Dcpp-keyword>int</SPAN></CODE>.=20
        <DT><CODE>DDX_FLOAT</CODE>=20
        <DD>Transfers numerical data between an edit box and a =
<CODE><SPAN=20
        class=3Dcpp-keyword>float</SPAN></CODE> or <CODE><SPAN=20
        class=3Dcpp-keyword>double</SPAN></CODE>.=20
        <DT><CODE>DDX_CHECK</CODE>=20
        <DD>Transfers the state of a check box to/from an <CODE><SPAN=20
        class=3Dcpp-keyword>int</SPAN></CODE>.=20
        <DT><CODE>DDX_RADIO</CODE>=20
        <DD>Transfers the state of a group of radio buttons to/from an=20
        <CODE><SPAN class=3Dcpp-keyword>int</SPAN></CODE>. </DD></DL>
      <P>A note about using <CODE>DDX_FLOAT</CODE>: When you use this in =
your=20
      app, you need to add a #define to stdafx.h, before any WTL headers =
are=20
      included:</P><PRE><SPAN class=3Dcpp-preprocessor>#define =
_ATL_USE_DDX_FLOAT</SPAN></PRE>
      <P>This is necessary because by default, floating-point support is =

      disabled as a size optimization.</P>
      <H3><A name=3Dmoreddx></A>More about DoDataExchange()</H3>
      <P>You call the <CODE>DoDataExchange()</CODE> method just as you =
call=20
      <CODE>UpdateData()</CODE> in MFC. The prototype for=20
      <CODE>DoDataExchange()</CODE> is:</P><PRE>BOOL DoDataExchange ( =
BOOL bSaveAndValidate =3D FALSE,=20
                      UINT nCtlID =3D (UINT)-<SPAN =
class=3Dcpp-literal>1</SPAN> );</PRE>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
无码av中文一区二区三区桃花岛| 国产欧美日韩在线视频| 一区二区三区中文字幕精品精品 | 亚洲综合激情网| 欧美色图天堂网| 日韩国产欧美三级| 久久综合色综合88| 成人免费毛片aaaaa**| 一区二区三区不卡视频在线观看| 欧美年轻男男videosbes| 蜜臀av性久久久久蜜臀av麻豆| 精品国偷自产国产一区| 成人毛片视频在线观看| 夜夜爽夜夜爽精品视频| 51精品视频一区二区三区| 九色综合狠狠综合久久| 中文字幕不卡的av| 在线观看www91| 狠狠网亚洲精品| 亚洲人成在线观看一区二区| 欧美日韩国产首页在线观看| 国产真实乱子伦精品视频| 亚洲色图在线播放| 日韩一区二区免费电影| 国产成人免费视频网站| 亚洲最大色网站| 精品国产髙清在线看国产毛片| 成人国产免费视频| 日本欧美韩国一区三区| 国产精品毛片高清在线完整版| 欧美午夜影院一区| 国产精品一卡二| 亚洲国产欧美在线| 亚洲国产精品成人久久综合一区| 欧美无砖砖区免费| 国产成人午夜视频| 五月天欧美精品| 欧美高清一级片在线观看| 7777精品伊人久久久大香线蕉| 成人黄色国产精品网站大全在线免费观看| 亚洲成人你懂的| 国产精品区一区二区三| 欧美一区二区三区播放老司机 | 成人动漫av在线| 日本少妇一区二区| 亚洲精品日韩一| 国产欧美精品国产国产专区| 欧美男男青年gay1069videost | 欧美tk丨vk视频| 欧美视频中文一区二区三区在线观看| 高清久久久久久| 麻豆成人久久精品二区三区红| 亚洲综合av网| 亚洲欧洲在线观看av| 精品99久久久久久| 9191成人精品久久| 欧美午夜理伦三级在线观看| 成人午夜私人影院| 国产一区二区免费在线| 日本不卡视频在线| 日韩中文字幕一区二区三区| 最近日韩中文字幕| 中文字幕av在线一区二区三区| 久久先锋影音av| 2020国产成人综合网| 日韩精品资源二区在线| 日韩欧美美女一区二区三区| 538prom精品视频线放| 欧美日韩aaaaa| 欧美色爱综合网| 欧美日韩另类国产亚洲欧美一级| 日本高清不卡一区| 色就色 综合激情| 91福利在线导航| 欧美日韩在线三级| 欧美色精品在线视频| 欧美日韩小视频| 在线不卡免费av| 4438成人网| 精品国内片67194| 久久蜜桃一区二区| 久久久国际精品| 国产日韩欧美在线一区| 国产午夜精品一区二区| 国产亚洲欧美在线| 欧美国产精品v| 亚洲日本免费电影| 亚洲国产成人tv| 美日韩黄色大片| 国产一区二区三区av电影| 丰满岳乱妇一区二区三区| 91性感美女视频| 欧美日韩国产片| 日韩欧美在线观看一区二区三区| 日韩欧美卡一卡二| 国产女人水真多18毛片18精品视频| 国产日韩欧美一区二区三区综合| 国产精品视频一二| 亚洲精品菠萝久久久久久久| 午夜成人在线视频| 国产精品一区二区久久不卡| av成人免费在线| 欧美性猛交xxxxxxxx| 欧美xxxxxxxxx| 国产精品午夜春色av| 亚洲女与黑人做爰| 奇米一区二区三区| 国产成人精品免费网站| 色婷婷久久久综合中文字幕 | 99在线精品观看| 欧美日韩黄色一区二区| 精品国产一区a| 中文字幕中文在线不卡住| 亚洲综合一区二区三区| 秋霞av亚洲一区二区三| 国产成人av一区二区三区在线| 91在线视频观看| 日韩欧美国产电影| 亚洲同性gay激情无套| 七七婷婷婷婷精品国产| 成人国产精品免费网站| 欧美丰满高潮xxxx喷水动漫| 国产午夜精品一区二区三区嫩草| 亚洲自拍偷拍欧美| 国产91精品久久久久久久网曝门| 欧美日韩中文字幕一区| 久久久精品免费网站| 亚洲自拍偷拍图区| 国产精品123| 日韩三级中文字幕| 亚洲视频在线一区| 国产美女av一区二区三区| 欧美日韩国产123区| 亚洲国产精品成人综合| 另类中文字幕网| 91精品福利视频| 国产欧美日韩亚州综合| 日本va欧美va欧美va精品| 91啪亚洲精品| 欧美国产欧美综合| 麻豆成人久久精品二区三区红 | 国内精品视频666| 精品视频一区 二区 三区| 国产午夜三级一区二区三| 亚洲国产aⅴ成人精品无吗| 国产成人在线影院| 精品国产一区二区三区久久影院 | 欧美成人精品福利| 亚洲宅男天堂在线观看无病毒| 福利一区在线观看| 日韩免费成人网| 香港成人在线视频| 在线视频欧美区| 亚洲免费在线视频一区 二区| 国产精品一二三四区| 欧美成人一区二区三区片免费 | 精品系列免费在线观看| 欧美视频一二三区| 亚洲欧美另类久久久精品2019| 国产91精品久久久久久久网曝门 | 成人av在线一区二区三区| 久久综合九色综合久久久精品综合 | 日本免费新一区视频| 欧美日韩精品欧美日韩精品| 亚洲制服丝袜在线| 欧洲色大大久久| 亚洲小说春色综合另类电影| 91黄色免费版| 亚洲国产成人精品视频| 欧美日高清视频| 日本伊人色综合网| 91精品国产一区二区三区蜜臀| 婷婷国产v国产偷v亚洲高清| 欧美日韩国产精品成人| 秋霞影院一区二区| 精品久久久久av影院| 国内不卡的二区三区中文字幕| 精品乱码亚洲一区二区不卡| 看电视剧不卡顿的网站| 久久午夜电影网| 成人免费毛片嘿嘿连载视频| 亚洲欧洲日韩女同| 91国偷自产一区二区三区成为亚洲经典| 中文字幕日韩一区二区| 色综合夜色一区| 午夜不卡在线视频| 精品国产污污免费网站入口 | 久久国产成人午夜av影院| 日韩免费性生活视频播放| 国产在线精品免费av| 国产精品久久久久aaaa| 一本色道a无线码一区v| 亚洲va韩国va欧美va精品| 欧美丰满美乳xxx高潮www| 久久成人免费日本黄色| 中文字幕一区二区三区四区不卡| 欧美三级中文字幕| 国产又黄又大久久| 亚洲人快播电影网| 91精品国产一区二区三区|