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

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

?? ch11.htm

?? 用VC開發ACTIVEX書籍和隨書源碼
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
// create a global memory object<BR>
<BR>
HGLOBAL hGlobal = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE,<BR>
<BR>
sizeof(TCHAR) * lLength);<BR>
<BR>
<BR>
<BR>
// lock the memory down<BR>
<BR>
LPTSTR lpTempBuffer = (LPTSTR) ::GlobalLock(hGlobal); <BR>
// copy the string<BR>
<BR>
for(long lCount = 0; lCount &lt; lLength - 1; lCount++)<BR>
<BR>
lpTempBuffer[lCount] = m_lptstrCaption[lCount]; <BR>
// null terminate the string<BR>
<BR>
lpTempBuffer[lCount] = `\0'; <BR>
// unlock the memory<BR>
<BR>
::GlobalUnlock(hGlobal); <BR>
// copy all of the members<BR>
<BR>
sTextFormatEtc.cfFormat = CF_TEXT;<BR>
<BR>
sTextFormatEtc.ptd = NULL;<BR>
<BR>
sTextFormatEtc.dwAspect = 0;<BR>
<BR>
sTextFormatEtc.lindex = -1;<BR>
<BR>
sTextFormatEtc.tymed = TYMED_HGLOBAL; <BR>
// if we have already allocated the data<BR>
<BR>
if(sTextStgMedium.hGlobal)<BR>
<BR>
// release it<BR>
<BR>
::ReleaseStgMedium(&amp;sTextStgMedium); <BR>
sTextStgMedium.tymed = TYMED_HGLOBAL;<BR>
<BR>
sTextStgMedium.hGlobal = hGlobal;<BR>
<BR>
sTextStgMedium.pUnkForRelease = NULL; <BR>
}<BR>
</TT></FONT></P>
<P><TT>CopyStgMedium</TT> (see Listing 11.24) is a simple helper function to copy
one <TT>STGMEDIUM</TT> structure to another. The function relies on the <TT>OleDuplicateData</TT>
function to create a new copy of the global memory stored in the source <TT>STGMEDIUM</TT>.
The copied data is then stored in the target <TT>STGMEDIUM</TT> structure.
<H3><A NAME="Heading32"></A>Listing 11.24 <SPACER TYPE="HORIZONTAL" SIZE="10">BCFCONTROLCTL.CPP--CopyStgMedium
Implementation</H3>
<P><FONT COLOR="#0066FF"><TT>void CBCFControlControl::CopyStgMedium(LPSTGMEDIUM lpTargetStgMedium,
<BR>
<BR>
LPSTGMEDIUM lpSourceStgMedium, CLIPFORMAT cfSourceFormat)<BR>
<BR>
{<BR>
<BR>
// copy the stgmedium members<BR>
<BR>
lpTargetStgMedium-&gt;tymed = lpSourceStgMedium-&gt;tymed;<BR>
<BR>
lpTargetStgMedium-&gt;pUnkForRelease = lpSourceStgMedium-&gt;pUnkForRelease;<BR>
<BR>
lpTargetStgMedium-&gt;hGlobal = ::OleDuplicateData(lpSourceStgMedium-&gt;hGlobal,
<BR>
<BR>
cfSourceFormat, GMEM_MOVEABLE | GMEM_SHARE | GMEM_ZEROINIT); <BR>
}<BR>
</TT></FONT></P>
<P>The next set of functions (see Listing 11.25) are implemented for the <TT>IDataObject</TT>
interface that you declared in your header file. A number of methods are not implemented
and return the value <TT>E_NOTIMPL</TT> because they are not needed for this implementation.</P>
<P><TT>GetData</TT> is the function called when you need to copy the data in your
<TT>STGMEDIUM</TT> structure to the <TT>STGMEDIUM</TT> structure that is supplied.
You first see whether the format that is requested matches the data that you support
and, if so, copy the data using your helper function.</P>
<P><TT>EnumFormatEtc</TT> is the method called when the requesting application wants
to enumerate your supported formats. You support only the <TT>DATADIR_GET</TT> direction,
which means you can support only the <TT>GetData</TT> function and not the <TT>SetData</TT>
function of the <TT>IDataObject</TT> interface.</P>
<P>The remainder of the functions are not implemented and simply return the constant
<TT>E_NOTIMPL</TT>.
<H3><A NAME="Heading33"></A>Listing 11.25 <SPACER TYPE="HORIZONTAL" SIZE="10">BCFCONTROLCTL.CPP--IDataObject
Implementation</H3>
<P><FONT COLOR="#0066FF"><TT>STDMETHODIMP CBCFControlControl::GetData(LPFORMATETC
lpFormatEtc, <BR>
<BR>
LPSTGMEDIUM lpStgMedium)<BR>
<BR>
{<BR>
<BR>
// if this is a format that we can deal with<BR>
<BR>
if(lpFormatEtc-&gt;cfFormat == CF_TEXT &amp;&amp; lpFormatEtc-&gt;tymed &amp; TYMED_HGLOBAL)<BR>
<BR>
{<BR>
<BR>
// get a copy of the current stgmedium<BR>
<BR>
this-&gt;CopyStgMedium(lpStgMedium, &amp;sTextStgMedium, CF_TEXT); <BR>
return S_OK;<BR>
<BR>
}<BR>
<BR>
else<BR>
<BR>
return DATA_E_FORMATETC;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::GetDataHere(LPFORMATETC /*lpFormatEtc*/, <BR>
<BR>
LPSTGMEDIUM /*lpStgMedium*/)<BR>
<BR>
{<BR>
<BR>
return E_NOTIMPL;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::QueryGetData(LPFORMATETC /*lpFormatEtc*/)<BR>
<BR>
{<BR>
<BR>
return E_NOTIMPL;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::GetCanonicalFormatEtc(LPFORMATETC /*lpFormatEtcIn*/,<BR>
<BR>
LPFORMATETC /*lpFormatEtcOut*/)<BR>
<BR>
{<BR>
<BR>
return E_NOTIMPL;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::SetData(LPFORMATETC /*lpFormatEtc*/,<BR>
<BR>
LPSTGMEDIUM /*lpStgMedium*/,<BR>
<BR>
BOOL /*bRelease*/)<BR>
<BR>
{<BR>
<BR>
return E_NOTIMPL;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::EnumFormatEtc(DWORD dwDirection, <BR>
<BR>
LPENUMFORMATETC * ppenumFormatEtc)<BR>
<BR>
{<BR>
<BR>
// we support &quot;get&quot; operations<BR>
<BR>
if(dwDirection == DATADIR_GET)<BR>
<BR>
{<BR>
<BR>
// make the assignment<BR>
<BR>
*ppenumFormatEtc = (IEnumFORMATETC *) this;<BR>
<BR>
<BR>
<BR>
// increment the reference count<BR>
<BR>
(*ppenumFormatEtc)-&gt;AddRef(); <BR>
// return success<BR>
<BR>
return S_OK;<BR>
<BR>
} <BR>
return E_NOTIMPL;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::DAdvise(FORMATETC * /*pFormatEtc*/, DWORD /*advf*/,<BR>
<BR>
LPADVISESINK /*pAdvSink*/, DWORD * /*pdwConnection*/)<BR>
<BR>
{<BR>
<BR>
return E_NOTIMPL;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::DUnadvise(DWORD /*dwConnection*/)<BR>
<BR>
{<BR>
<BR>
return E_NOTIMPL;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::EnumDAdvise(LPENUMSTATDATA * /*ppenumAdvise*/)<BR>
<BR>
{<BR>
<BR>
return E_NOTIMPL; <BR>
}<BR>
</TT></FONT></P>
<P>The next set of functions (see Listing 11.26) are implemented for the <TT>IEnumFORMATETC</TT>
interface that you declared in your header file. Cloning is not supported and will
return the value <TT>E_NOTIMPL</TT>.</P>
<P>The <TT>Next</TT> function is used to enumerate through the entire list of supported
formats. You first check to see whether your counter is set to the first element
and that the user asked for at least one entry. If so, you set the <TT>FORMATETC</TT>
structure to your supported format, and if appropriate, you set the number of elements
that you are returning and increment the counter.</P>
<P>The <TT>Skip</TT> function advances the enumerator by the number of elements specified.</P>
<P>The <TT>Reset</TT> function sets the enumerator back to the beginning of the enumeration.
<H3><A NAME="Heading34"></A>Listing 11.26<SPACER TYPE="HORIZONTAL" SIZE="10"> BCFCONTROLCTL.CPP--IEnumFORMATETC
Implementation</H3>
<P><FONT COLOR="#0066FF"><TT>STDMETHODIMP CBCFControlControl::Next(ULONG celt, FORMATETC_RPC_FAR
* rgelt, <BR>
<BR>
ULONG RPC_FAR * pceltFetched)<BR>
<BR>
{<BR>
<BR>
// if we are at the beginning of the enumeration<BR>
<BR>
if(ulFORMATETCElement == 0 &amp;&amp; celt &gt; 0)<BR>
<BR>
{<BR>
<BR>
// copy all of the members<BR>
<BR>
rgelt-&gt;cfFormat = CF_TEXT;<BR>
<BR>
rgelt-&gt;ptd = NULL;<BR>
<BR>
rgelt-&gt;dwAspect = 0;<BR>
<BR>
rgelt-&gt;lindex = -1;<BR>
<BR>
rgelt-&gt;tymed = TYMED_HGLOBAL;<BR>
<BR>
<BR>
<BR>
// if the caller wants to know how many we copied<BR>
<BR>
if(pceltFetched)<BR>
<BR>
*pceltFetched = 1; <BR>
// increment the counter<BR>
<BR>
ulFORMATETCElement++; <BR>
// return success<BR>
<BR>
return S_OK;<BR>
<BR>
}<BR>
<BR>
else<BR>
<BR>
// return failure<BR>
<BR>
return S_FALSE;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::Skip(ULONG celt)<BR>
<BR>
{<BR>
<BR>
// move the counter by the number of elements supplied<BR>
<BR>
ulFORMATETCElement += celt;<BR>
<BR>
<BR>
<BR>
// return success<BR>
<BR>
return S_OK;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::Reset(void)<BR>
<BR>
{<BR>
<BR>
// reset to the beginning of the enumerator<BR>
<BR>
ulFORMATETCElement = 0;<BR>
<BR>
<BR>
<BR>
// return success<BR>
<BR>
return S_OK;<BR>
<BR>
} <BR>
STDMETHODIMP CBCFControlControl::Clone(IEnumFORMATETC RPC_FAR *__RPC_FAR * /*ppenum*/)<BR>
<BR>
{<BR>
<BR>
return E_NOTIMPL; <BR>
}<BR>
</TT></FONT></P>
<P>Finally you are at the end of your implementation: the <TT>OnKeyDown</TT> function
(see Listing 11.27). The <TT>OnKeyDown</TT> contains all of the code that is necessary
to look for the common keystroke combinations used to initiate Clipboard operations.
<H3><A NAME="Heading35"></A>Listing 11.27 <SPACER TYPE="HORIZONTAL" SIZE="10">BCFCONTROLCTL.CPP--OnKeyDown
Implementation</H3>
<P><FONT COLOR="#0066FF"><TT>void CBCFControlControl::OnKeyDown(UINT nChar, UINT
nRepCnt, UINT nFlags)<BR>
<BR>
{<BR>
<BR>
BOOL bHandled = FALSE; <BR>
// find out if the shift key is being held down<BR>
<BR>
short sShift = ::GetKeyState(VK_SHIFT);<BR>
<BR>
// find out if the control key is being held down<BR>
<BR>
short sControl = ::GetKeyState(VK_CONTROL); <BR>
switch(nChar)<BR>
<BR>
{<BR>
<BR>
// COPY or PASTE<BR>
<BR>
case 0x43: // `C'<BR>
<BR>
case 0x63: // `c' <BR>
<BR>
// if the control key is being held down<BR>
<BR>
if(sControl &amp; 0x8000)<BR>
<BR>
{<BR>
<BR>
// copy the data to the clipboard<BR>
<BR>
this-&gt;CopyDataToClipboard(); <BR>
// we don't need to pass this key to the base implementation<BR>
<BR>
bHandled = TRUE;<BR>
<BR>
}<BR>
<BR>
break;<BR>
<BR>
case 0x58: // `X'<BR>
<BR>
case 0x78: // `x'<BR>
<BR>
case VK_DELETE:<BR>
<BR>
// if this is a shift delete OR CTRL-X/x<BR>
<BR>
if((nChar == VK_DELETE &amp;&amp; (sShift &amp; 0x8000)) || <BR>
<BR>
((nChar == 0x58 || nChar == 0x78) &amp;&amp; (sControl &amp; 0x8000)))<BR>
<BR>
{<BR>
<BR>
this-&gt;CopyDataToClipboard(); <BR>
// clear the str

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图在线视频| 国产一区二区三区精品视频| 777亚洲妇女| 在线一区二区观看| av电影在线观看一区| 国内精品视频一区二区三区八戒| 免费欧美日韩国产三级电影| 蜜桃久久av一区| 蜜乳av一区二区三区| 奇米色777欧美一区二区| 日日夜夜精品视频免费 | 日韩欧美国产一二三区| 色哟哟一区二区| 欧美日韩高清影院| 欧美videos中文字幕| 久久久久久9999| 国产香蕉久久精品综合网| 国产精品美女久久福利网站| 亚洲夂夂婷婷色拍ww47| 午夜一区二区三区视频| 波多野洁衣一区| 欧美精品v国产精品v日韩精品 | 夜夜夜精品看看| 久久久蜜桃精品| 亚洲综合色在线| 日韩一区二区三区视频在线观看| 美女一区二区三区在线观看| 亚洲成人免费电影| 日韩欧美国产精品| av在线不卡电影| 久久超碰97人人做人人爱| 久久精品一区二区三区四区| 色香蕉成人二区免费| 极品少妇一区二区| 日韩毛片在线免费观看| 色吧成人激情小说| 日韩欧美一级二级三级久久久| 亚洲精品视频在线| 国产一区三区三区| 91精品国产色综合久久不卡蜜臀 | 国产福利91精品一区二区三区| 国产99久久久国产精品免费看| 91精选在线观看| 亚洲高清视频的网址| 91色综合久久久久婷婷| 国产精品午夜免费| 国产电影一区在线| 欧美国产日韩a欧美在线观看| 日本aⅴ精品一区二区三区 | 国产原创一区二区| 日韩欧美国产三级| 麻豆中文一区二区| 精品少妇一区二区三区免费观看| 亚洲国产中文字幕| 欧美日韩你懂得| 亚洲视频 欧洲视频| 亚洲欧美日韩国产另类专区| 成人高清免费观看| 94-欧美-setu| 日韩欧美色综合| 日韩国产在线观看| 亚洲一区二区高清| 日韩理论在线观看| 中文字幕欧美三区| 日韩精品综合一本久道在线视频| 精品视频1区2区3区| 色婷婷综合久久久中文字幕| 大陆成人av片| 成人a区在线观看| 国产精品黄色在线观看| 欧美午夜精品一区| 日韩黄色免费电影| 日韩欧美国产三级电影视频| 麻豆专区一区二区三区四区五区| 国产无一区二区| 欧美日韩国产免费一区二区| 经典三级在线一区| 一区二区日韩电影| 国产蜜臀97一区二区三区 | 天堂成人国产精品一区| 国产免费观看久久| 欧美三级蜜桃2在线观看| 国产精品亚洲午夜一区二区三区 | 成人黄动漫网站免费app| 亚洲精选免费视频| 欧美国产一区二区在线观看 | 91传媒视频在线播放| 轻轻草成人在线| 亚洲国产毛片aaaaa无费看| 亚洲欧美一区二区三区极速播放 | 亚洲免费毛片网站| 欧美丝袜第三区| 色狠狠一区二区| 欧美在线观看18| 亚洲欧美综合在线精品| 不卡一卡二卡三乱码免费网站| 国产精品视频一二三区| 国产精品成人一区二区三区夜夜夜| 一区二区日韩电影| 亚洲一区二区三区美女| 日本在线观看不卡视频| 国模一区二区三区白浆| 99精品国产视频| 91精品久久久久久久久99蜜臂| 精品国产免费人成电影在线观看四季 | 欧美日韩免费高清一区色橹橹| 国产福利精品导航| 亚洲第一二三四区| 污片在线观看一区二区| 热久久久久久久| 国产精品1区二区.| 成人av一区二区三区| 成人av综合在线| 欧美日韩一区二区三区在线看| 91九色最新地址| 欧美大片在线观看一区二区| 久久久夜色精品亚洲| 国产精品天美传媒| 美女视频一区二区三区| 国内成+人亚洲+欧美+综合在线| 成人免费看片app下载| 精品污污网站免费看| 欧美成人女星排行榜| 国产视频在线观看一区二区三区| 日韩毛片高清在线播放| 午夜亚洲福利老司机| 久久se精品一区二区| 日韩美女视频在线| 亚洲自拍偷拍网站| 91极品视觉盛宴| 日韩二区三区在线观看| 欧美久久一二区| 欧美三级电影在线看| 色播五月激情综合网| 26uuu色噜噜精品一区| 国产精品一区二区91| 日韩av二区在线播放| 亚洲成人一区二区在线观看| 在线观看视频一区| 国产清纯美女被跳蛋高潮一区二区久久w | 国产视频一区二区三区在线观看| 亚洲一级电影视频| 成人一道本在线| xvideos.蜜桃一区二区| 日韩精品欧美成人高清一区二区| 色综合欧美在线| 91亚洲精华国产精华精华液| 精品久久久久久久久久久久久久久久久 | av一本久道久久综合久久鬼色| 欧美一区二视频| 欧美日韩国产高清一区| 欧美午夜精品理论片a级按摩| 91一区二区在线观看| 在线观看亚洲专区| 8x8x8国产精品| 欧美成人女星排名| 国产欧美一区二区精品性色| 国产日韩av一区二区| 国产精品超碰97尤物18| 亚洲国产一区视频| 五月激情综合色| 成人白浆超碰人人人人| 91麻豆精品91久久久久久清纯 | 国产一区二区三区在线观看精品 | 国产精品久久久久久户外露出 | 亚洲已满18点击进入久久| 一级女性全黄久久生活片免费| 一区二区三区四区在线播放| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美在线影院一区二区| 欧美一区日韩一区| 日本一区二区在线不卡| 一片黄亚洲嫩模| 国产一区二区三区国产| 色综合久久综合网| 日韩欧美一区二区久久婷婷| 国产精品高潮呻吟| 裸体歌舞表演一区二区| 91久久精品国产91性色tv| 日韩欧美你懂的| 亚洲狠狠爱一区二区三区| 国产毛片精品视频| 欧美精品在欧美一区二区少妇| 国产午夜精品一区二区三区四区| 亚洲综合无码一区二区| 国产美女精品在线| 日韩免费性生活视频播放| 亚洲一级在线观看| 91国模大尺度私拍在线视频 | 北条麻妃国产九九精品视频| 精品久久久久久久久久久久久久久 | 日韩av一二三| 99麻豆久久久国产精品免费| 国产精品久久久久久久第一福利 | 日韩精品影音先锋| 国产99久久久久| 亚洲柠檬福利资源导航| 欧美猛男男办公室激情| 蜜桃视频在线观看一区二区| 国产精品天美传媒沈樵|