<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>My way of my life &#187; C/C++</title>
	<atom:link href="http://www.kync.com/blog/tag/c-and-cpp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kync.com/blog</link>
	<description>Those ashame days.</description>
	<lastBuildDate>Mon, 12 Apr 2010 21:51:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/3.0/us/</creativeCommons:license>
		<item>
		<title>Controls In ActiveX Control &#8211; 在Activex 控件中嵌入对话框</title>
		<link>http://www.kync.com/blog/2006/05/controls-in-activex-control/</link>
		<comments>http://www.kync.com/blog/2006/05/controls-in-activex-control/#comments</comments>
		<pubDate>Tue, 16 May 2006 21:33:31 +0000</pubDate>
		<dc:creator>Sunyc</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://www.kync.com/blog/c/controls-in-activex-control/</guid>
		<description><![CDATA[众所周知&#8230; appwizard 生成的 Activex Control 里面只有一个OnDraw方法，实在是可怜。不过今天我偶然发现一篇好文章，不敢独享，下面是具体的修改方法。 原文在这里 Dialog frame as an ActiveX control&#160; 比较有意思的是，原文并没有解决所有问题，倒是后面的comment不得不看！ 步骤翻译和修改如下： 

建立一个新的mfc activex control工程,比如说叫CTestCtl
在资源编辑器里插入一个新的Dialog ,ID为IDC_MYDIALOG , 注意属性部分: style &#8211; child, border &#8211; dialog frame, visible, control, static edge
增加一个新的MFC类，基类为CDialog 的CMyDialog,当然，ID要指向 IDC_MYDIALOG
在CTestCtl中增加一个CMyDialog 类型的成员变量 m_cMyDialog
使用Classwizard对WM_CREATE事件添加一个handler.并增加如下的代码 
int CDialogCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if&#160;(COleControl::OnCreate(lpCreateStruct) == -1)
&#160;return -1;
&#160;m_MyDialog.Create(IDD_MYDIALOG, this);
&#160;return 0; 
}

在OnDraw函数中处理如下 
void CTestCtrl::OnDraw(CDC* pdc, const CRect&#38; rcBounds, const CRect&#38; rcInvalid)
{
  [...]]]></description>
			<content:encoded><![CDATA[<p>众所周知&#8230; appwizard 生成的 Activex Control 里面只有一个OnDraw方法，实在是可怜。不过今天我偶然发现一篇好文章，不敢独享，下面是具体的修改方法。<br /> 原文在这里 <a href="http://www.codeguru.com/Cpp/COM-Tech/activex/controls/article.php/c2615"><font>Dialog frame as an ActiveX control&nbsp; </font></a><font>比较有意思的是，原文并没有解决所有问题，倒是后面的comment不得不看！</font><br /> 步骤翻译和修改如下：<br /> 
<ul>
<li>建立一个新的mfc activex control工程,比如说叫CTestCtl</li>
<li>在资源编辑器里插入一个新的Dialog ,ID为IDC_MYDIALOG , 注意属性部分: style &#8211; child, border &#8211; dialog frame, visible, control, static edge</li>
<li>增加一个新的MFC类，基类为CDialog 的CMyDialog,当然，ID要指向 IDC_MYDIALOG</li>
<li>在CTestCtl中增加一个CMyDialog 类型的成员变量 m_cMyDialog</li>
<li>使用Classwizard对WM_CREATE事件添加一个handler.并增加如下的代码<br /> 
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span class="hl-types">int</span><span style="color: Gray;"> </span><span style="color: Blue;">CDialogCtrl</span><span style="color: Gray;">::</span><span style="color: Blue;">OnCreate</span><span style="color: Olive;">(</span><span style="color: Blue;">LPCREATESTRUCT</span><span style="color: Gray;"> </span><span style="color: Blue;">lpCreateStruct</span><span style="color: Olive;">)</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">COleControl</span><span style="color: Gray;">::</span><span style="color: Blue;">OnCreate</span><span style="color: Olive;">(</span><span style="color: Blue;">lpCreateStruct</span><span style="color: Olive;">)</span><span style="color: Gray;"> == -</span><span style="color: Maroon;">1</span><span style="color: Olive;">)</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> -</span><span style="color: Maroon;">1</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">m_MyDialog</span><span style="color: Gray;">.</span><span style="color: Blue;">Create</span><span style="color: Olive;">(</span><span style="color: Blue;">IDD_MYDIALOG</span><span style="color: Gray;">, </span><span style="color: Green;">this</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Maroon;">0</span><span style="color: Gray;">; </span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
</li>
<li>在OnDraw函数中处理如下<br /> <br />
void CTestCtrl::OnDraw(CDC* pdc, const CRect&amp; rcBounds, const CRect&amp; rcInvalid)<br />
{<br />
   if(m_cMyDialog.GetSafeHwnd())<br />
        m_MyDialog.MoveWindow(rcBounds, TRUE);<br />
}<br />
</coolcode>
</li>
<li>对PreCreate事件处理
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">BOOL</span><span style="color: Gray;"> </span><span style="color: Blue;">CTestCtrl</span><span style="color: Gray;">::</span><span style="color: Blue;">PreCreateWindow</span><span style="color: Olive;">(</span><span style="color: Blue;">CREATESTRUCT</span><span style="color: Gray;">&amp; </span><span style="color: Blue;">cs</span><span style="color: Olive;">)</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;&nbsp; </span><span style="color: Blue;">cs</span><span style="color: Gray;">.</span><span style="color: Blue;">dwExStyle</span><span style="color: Gray;"> |= </span><span style="color: Blue;">WS_EX_CONTROLPARENT</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;&nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">COleControl</span><span style="color: Gray;">::</span><span style="color: Blue;">PreCreateWindow</span><span style="color: Olive;">(</span><span style="color: Blue;">cs</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
</li>
<li>对OnSetObjectRects事件处理
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">BOOL</span><span style="color: Gray;"> </span><span style="color: Blue;">CJustWatchClientCtrl</span><span style="color: Gray;">::</span><span style="color: Blue;">OnSetObjectRects</span><span style="color: Olive;">(</span><span style="color: Blue;">LPCRECT</span><span style="color: Gray;"> </span><span style="color: Blue;">lpRectPos</span><span style="color: Gray;">, </span><span style="color: Blue;">LPCRECT</span><span style="color: Gray;"> </span><span style="color: Blue;">lpRectClip</span><span style="color: Olive;">)</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp;&nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">m_cMainDlg</span><span style="color: Gray;">.</span><span style="color: Blue;">GetSafeHwnd</span><span style="color: Olive;">())</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp;&nbsp; </span><span style="color: Blue;">m_cMainDlg</span><span style="color: Gray;">.</span><span style="color: Blue;">MoveWindow</span><span style="color: Olive;">(</span><span style="color: Blue;">lpRectPos</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp;&nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp;&nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">COleControl</span><span style="color: Gray;">::</span><span style="color: Blue;">OnSetObjectRects</span><span style="color: Olive;">(</span><span style="color: Blue;">lpRectPos</span><span style="color: Gray;">, </span><span style="color: Blue;">lpRectClip</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
</li>
<li>添加Activex Controls支持，在app中的InitInstance修改
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">BOOL</span><span style="color: Gray;"> </span><span style="color: Blue;">CClientOCXApp</span><span style="color: Gray;">::</span><span style="color: Blue;">InitInstance</span><span style="color: Olive;">()</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Blue;">BOOL</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">bInit</span><span style="color: Gray;"> = </span><span style="color: Blue;">COleControlModule</span><span style="color: Gray;">::</span><span style="color: Blue;">InitInstance</span><span style="color: Olive;">()</span><span style="color: Gray;">; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">(</span><span style="color: Blue;">bInit</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">AfxEnableControlContainer</span><span style="color: Olive;">()</span><span style="color: Gray;">; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">bInit</span><span style="color: Gray;">; </span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
</li>
<li>大功告成！多简单！</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.kync.com/blog/2006/05/controls-in-activex-control/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/3.0/us/</creativeCommons:license>
	</item>
	</channel>
</rss>
