SkinUI入门教程

SkinUI入门教程


3.5 按钮

<p>按钮由CSkinButton类来代表,继承于CSkinView,支持CSkinView的所有属性和方法。通过给按钮设置不同的布局文件,可以得到各种形态的按钮。</p> <h2>1 属性和相关方法</h2> <h4>1.1 设置鼠标移上去按钮垂直方向的偏移量</h4> <ul> <li>通过XML属性控制如下: <pre><code class="language-xml">MouseOverOffset=&amp;quot;-1&amp;quot;</code></pre></li> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">void SetMouseOverOffset(LONG nOffset);</code></pre></li> </ul> <h4>1.2 设置鼠标按下时按钮垂直方向的偏移量</h4> <ul> <li>通过XML属性控制如下: <pre><code class="language-xml">PressDownOffset=&amp;quot;1&amp;quot;</code></pre></li> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">void SetPressDownOffset(LONG nOffset);</code></pre></li> </ul> <h2>2 消息处理</h2> <h4>2.1 WM_COMMAND消息</h4> <p>单击按钮,鼠标左键抬起时,如果按钮Id不为0,会给所在的窗口发送WM_COMMAND消息。</p> <p>请参考下面的示例代码:</p> <pre><code class="language-cpp">void CSkinButton::HandleLButtonUp(CPoint point) { if(GetState() == VS_PRESS_DOWN &amp;amp;&amp;amp; GetId() != 0) { GetOwner()-&amp;gt;PostMessage(WM_COMMAND, GetId(), reinterpret_cast&amp;lt;LPARAM&amp;gt;(this)); } if(GetState() == VS_PRESS_DOWN) { SetState(VS_MOUSE_OVER); RedrawView(); } CSkinRelativeLayout::HandleLButtonUp(point); }</code></pre> <h2>请看下面的示例</h2> <h4>效果图</h4> <p><img src="http://www.skinui.cn/doc/img/3/5/1.png" alt="按钮" /></p> <h4>布局文件</h4> <pre><code class="language-xml">&amp;lt;SkinDialog DefaultWidth=&amp;quot;400&amp;quot; DefaultHeight=&amp;quot;300&amp;quot; SysButton=&amp;quot;CLOSE&amp;quot; Icon=&amp;quot;128&amp;quot; Caption=&amp;quot;IDS_CONTROL_SHOW5&amp;quot; Animation=&amp;quot;SizeChange&amp;quot;&amp;gt; &amp;lt;SkinButton Id=&amp;quot;101&amp;quot; LayoutWidth=&amp;quot;WrapContent&amp;quot; LayoutHeight=&amp;quot;30&amp;quot; ChildText1=&amp;quot;Button&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentHorizontalCenter=&amp;quot;0&amp;quot; AlignParentTop=&amp;quot;50&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;102&amp;quot; LayoutWidth=&amp;quot;WrapContent&amp;quot; LayoutHeight=&amp;quot;WrapContent&amp;quot; ChildText2=&amp;quot;&amp;quot; ChildImage1=&amp;quot;Icon.png&amp;quot; Image=&amp;quot;IconButton.png&amp;quot; Layout=&amp;quot;IconButton.xml&amp;quot; AlignParentHorizontalCenter=&amp;quot;0&amp;quot; AlignParentTop=&amp;quot;100&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;103&amp;quot; LayoutWidth=&amp;quot;WrapContent&amp;quot; LayoutHeight=&amp;quot;24&amp;quot; ChildText2=&amp;quot;IconTextButton&amp;quot; ChildImage1=&amp;quot;Icon.png&amp;quot; Image=&amp;quot;IconButton.png&amp;quot; Layout=&amp;quot;IconTextButton.xml&amp;quot; AlignParentHorizontalCenter=&amp;quot;0&amp;quot; AlignParentTop=&amp;quot;150&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;104&amp;quot; LayoutWidth=&amp;quot;WrapContent&amp;quot; LayoutHeight=&amp;quot;WrapContent&amp;quot; Image=&amp;quot;BitmapButton.png&amp;quot; AlignParentHorizontalCenter=&amp;quot;0&amp;quot; AlignParentTop=&amp;quot;200&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/SkinDialog&amp;gt;</code></pre> <h4>h文件</h4> <pre><code class="language-c">#pragma once class CButtonDialog : public CSkinDialog { public: enum { IDC_BUTTON1 = 101, IDC_BUTTON2 = 102, IDC_BUTTON3 = 103, IDC_BUTTON4 = 104, }; public: CButtonDialog(const tstring&amp;amp; strXml); public: virtual void OnInitDialog(); protected: void OnButtonClicked(UINT uNotifyCode, int nID, CSkinView* pView); SKINUI_DECLARE_MESSAGE_MAP() };</code></pre> <h4>cpp文件</h4> <pre><code class="language-c">#include &amp;quot;stdafx.h&amp;quot; #include &amp;quot;ButtonDialog.h&amp;quot; SKINUI_BEGIN_MESSAGE_MAP(CButtonDialog, CSkinDialog) ON_SKINUI_COMMAND(IDC_BUTTON1, OnButtonClicked) ON_SKINUI_COMMAND(IDC_BUTTON2, OnButtonClicked) ON_SKINUI_COMMAND(IDC_BUTTON3, OnButtonClicked) ON_SKINUI_COMMAND(IDC_BUTTON4, OnButtonClicked) SKINUI_END_MESSAGE_MAP() CButtonDialog::CButtonDialog(const tstring&amp;amp; strXml) : CSkinDialog(strXml) { } void CButtonDialog::OnInitDialog() { CSkinDialog::OnInitDialog(); } void CButtonDialog::OnButtonClicked(UINT uNotifyCode, int nID, CSkinView* pView) { MsgBox(SkinUI::StringFormat(_T(&amp;quot;OnButtonClicked,Id=%d!&amp;quot;), nID)); }</code></pre>

页面列表

ITEM_HTML