菜单
<h2>弹出菜单</h2>
<ul>
<li>调用以下接口弹出资源菜单:</li>
</ul>
<pre><code class="language-c">HWND CDialog::PopupMenu(const String& strMenu, const CPoint& ptPopup, const CSize& szButton, CView* pNotifyView);</code></pre>
<ul>
<li>调用以下接口弹出动态菜单:</li>
</ul>
<pre><code class="language-c">HWND CDialog::PopupMenu(CXMLNode& xmlNode, const CPoint& ptPopup, const CSize& szButton, CView* pNotifyView);</code></pre>
<p>弹出菜单时,可以自适应方向弹出,也可以指定弹出方向。</p>
<ul>
<li>弹出方向</li>
</ul>
<pre><code class="language-c">//自适应弹出
PopupDirection=""
//左上弹出
PopupDirection="LeftTop"
//右上弹出
PopupDirection="RightTop"
//左下弹出
PopupDirection="LeftBottom"
//右下弹出
PopupDirection="RightBottom"</code></pre>
<ul>
<li>示例</li>
</ul>
<pre><code class="language-xml"><?xml version="1.0" encoding="utf-8"?>
<Menu PopupDirection="RightBottom">
<MenuItem Id="1005" Text="IDS_WEBSITE"/>
<MenuItem Id="1006" Text="IDS_ABOUT"/>
<MenuSeparator/>
<MenuItem Id="1007" Text="IDS_QUIT"/>
</Menu></code></pre>
<ul>
<li>下面是弹出菜单的代码的示例代码:</li>
</ul>
<pre><code class="language-c">void CMainDialog::OnBtnClickedPopMenu(UINT uNotifyCode, int nID, CSkinView* pView)
{
CPoint ptPopup;
GetCursorPos(&ptPopup);
GetOwner()->PopupMenu(_T("MainMenu.xml"), ptPopup, CSize(0, 0), this);
}</code></pre>
<h2>响应消息</h2>
<h4>h文件</h4>
<pre><code class="language-c">#pragma once
class CDemoMenuLayout : public CFlexLayout
{
public:
enum
{
IDC_ITEM_HIDED = 10000,
IDC_ITEM_CHECKED = 10001,
IDC_ITEM_DISABLED = 10002,
IDC_ITEM_WITH_ICON = 10003,
};
public:
CDemoMenuLayout(CView* pParent);
protected:
void OnUpdateCommandHided(CView* pView);
void OnUpdateCommandChecked(CView* pView);
void OnUpdateCommandDisabled(CView* pView);
void OnCommand(UINT uNotifyCode, int nID, CView* pView);
SKINUI_DECLARE_MESSAGE_MAP()
SKINUI_DECLARE_DYNCREATE(CDemoMenuLayout, CFlexLayout)
};</code></pre>
<h4>cpp文件</h4>
<pre><code class="language-c">#include <stdafx.h>
#include "DemoMenuLayout.h"
#include "MainDialog.h"
SKINUI_BEGIN_MESSAGE_MAP(CDemoMenuLayout, CFlexLayout)
ON_SKINUI_UPDATE_COMMAND_UI(IDC_ITEM_HIDED, OnUpdateCommandHided)
ON_SKINUI_UPDATE_COMMAND_UI(IDC_ITEM_CHECKED, OnUpdateCommandChecked)
ON_SKINUI_UPDATE_COMMAND_UI(IDC_ITEM_DISABLED, OnUpdateCommandDisabled)
ON_SKINUI_COMMAND_RANGE(IDC_ITEM_CHECKED, IDC_ITEM_WITH_ICON, OnCommand)
SKINUI_END_MESSAGE_MAP()
CDemoMenuLayout::CDemoMenuLayout(CView* pParent)
: CFlexLayout(pParent)
{
}
void CDemoMenuLayout::OnUpdateCommandHided(CView* pView)
{
pView->SetVisible(FALSE);
}
void CDemoMenuLayout::OnUpdateCommandChecked(CView* pView)
{
CListItem* pMenuItem = dynamic_cast<CListItem*>(pView);
if(pMenuItem)
{
pMenuItem->SetCheckBoxState(CHECKED);
}
}
void CDemoMenuLayout::OnUpdateCommandDisabled(CView* pView)
{
pView->SetEnable(FALSE);
}
void CDemoMenuLayout::OnCommand(UINT uNotifyCode, int nID, CView* pView)
{
CMainDialog::s_inst->Toast(SkinUI::Format(_T("您点击了Id=%d的菜单项"), nID));
}</code></pre>
<h2>普通菜单</h2>
<ul>
<li>效果图</li>
</ul>
<p><img src="http://www.skinui.cn/doc/img/5.0/4/Menu1.png" alt="菜单" /></p>
<ul>
<li>菜单文件</li>
</ul>
<pre><code class="language-xml"><?xml version="1.0" encoding="utf-8"?>
<Menu PopupDirection="RightBottom">
<MenuItem Id="1005" Text="IDS_WEBSITE"/>
<MenuItem Id="1006" Text="IDS_ABOUT"/>
<MenuSeparator/>
<MenuItem Id="1007" Text="IDS_QUIT"/>
</Menu></code></pre>
<ul>
<li>布局文件</li>
</ul>
<pre><code class="language-xml"><Button Width="18%" Height="WrapContent" ChildText11="自适应弹出" Background="Button.png" Layout="Button.xml" Menu="TestMenu.xml"/></code></pre>
<h2>自定义菜单</h2>
<ul>
<li>效果图</li>
</ul>
<p><img src="http://www.skinui.cn/doc/img/5.0/4/Menu2.png" alt="菜单" /></p>
<ul>
<li>菜单文件,自定义高度为60,自定义布局为DemoMenuItem.xml</li>
</ul>
<pre><code class="language-xml"><?xml version="1.0" encoding="utf-8"?>
<Menu>
<MenuItem Text="消息免打扰" Height="60" Layout="DemoMenuItem.xml"/>
<MenuItem Id="1005" Text="IDS_WEBSITE"/>
<MenuItem Id="1006" Text="IDS_ABOUT"/>
<MenuSeparator/>
<MenuItem Id="1007" Text="IDS_QUIT"/>
</Menu></code></pre>
<ul>
<li>菜单Item布局文件</li>
</ul>
<pre><code class="language-xml"><RelativeLayout>
<DemoMenuItemLayout Width="MatchParent" Height="MatchParent" AlignItems="Center">
<RelativeLayout Id="30" Width="16" Height="16" Margin="10,0,0,0">
<MenuImageView Id="10" Width="WrapContent" Height="WrapContent" AlignParentHorzCenter="0" AlignParentVertCenter="0"/>
<MenuStateView Width="WrapContent" Height="WrapContent" AlignParentHorzCenter="0" AlignParentVertCenter="0"/>
</RelativeLayout>
<MenuTextView Id="11" Width="WrapContent" Height="MatchParent" Margin="10,0,0,0"/>
<CheckBox Id="31" Width="40" Height="20" Margin="10,0,10,0" Background="CheckBox2.xml"/>
</DemoMenuItemLayout>
</RelativeLayout></code></pre>
<h4>h文件</h4>
<pre><code class="language-c">#pragma once
class CDemoMenuItemLayout : public CFlexLayout
{
public:
CDemoMenuItemLayout(CView* pParent);
protected:
void OnCheckBoxCheckedChange(LONG nId, CCheckBox* pCheckBox, BOOL& bHandle);
SKINUI_DECLARE_MESSAGE_MAP()
SKINUI_DECLARE_DYNCREATE(CDemoMenuItemLayout, CFlexLayout)
};</code></pre>
<h4>cpp文件</h4>
<pre><code class="language-c">#include <stdafx.h>
#include "DemoMenuItemLayout.h"
#include "MainDialog.h"
SKINUI_BEGIN_MESSAGE_MAP(CDemoMenuItemLayout, CFlexLayout)
ON_SKINUI_WM_CHECKBOX_CHECKED_CHANGE()
SKINUI_END_MESSAGE_MAP()
CDemoMenuItemLayout::CDemoMenuItemLayout(CView* pParent)
: CFlexLayout(pParent)
{
}
void CDemoMenuItemLayout::OnCheckBoxCheckedChange(LONG nId, CCheckBox* pCheckBox, BOOL& bHandle)
{
CMainDialog::s_inst->Toast(pCheckBox->IsChecked() ? _T("消息免打扰已打开") : _T("消息免打扰已关闭"));
}</code></pre>