日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

MFC(ActiveX编程,孙鑫C++第十八讲笔记整理)

發(fā)布時(shí)間:2025/3/20 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC(ActiveX编程,孙鑫C++第十八讲笔记整理) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

一:VB中調(diào)用X控件,添加方法?project->Add components。另外可以用Object Browser來(lái)查看控件

?

二:VC中創(chuàng)建X控件

1.新建一個(gè)X工程名為Clock,注意一個(gè)文件中可以包含多個(gè)控件。

2.保持缺省設(shè)置,完成。注意它生成的三個(gè)類,以及相關(guān)的接口。

3.運(yùn)行它。選擇TSTCON32.exe作為容器。

4.選擇Insert Control,此時(shí)我們可以看到,它畫了一個(gè)橢圓。也可以在VB中測(cè)試。

5.刪除注冊(cè)信息。用regsvr32 /u +文件名。也可以在菜單選擇反注冊(cè)命令。

6.重寫代碼。在CClockCtrl::OnDraw()中畫了一個(gè)橢圓,此時(shí)我們?cè)谄渲械玫较到y(tǒng)時(shí)間,并顯示它。為此我們?cè)?span style="font-family:'Times New Roman';">OnCreate()設(shè)置了一個(gè)定時(shí)器,每隔一定時(shí)間發(fā)出一個(gè)Invalidate()消息,使窗口重繪。

7.如何改變控件的背景色和前景色?ClassWizard->AutoMation->Add Property->BackColor,還需要在OnDraw()中加上相應(yīng)的代碼

CBrush brush(TranslateColor(GetBackColor()));

pdc->FillRect(rcBounds, &brush);

pdc->SetBkMode(TRANSPARENT);

pdc->SetTextColor(TranslateColor(GetForeColor()));

8.增加屬性頁(yè)。在

BEGIN_PROPPAGEIDS(CClockCtrl, 2)此時(shí)數(shù)目也得改成相應(yīng)的數(shù)目

PROPPAGEID(CClockPropPage::guid)

PROPPAGEID(CLSID_CColorPropPage)

END_PROPPAGEIDS(CClockCtrl)? OK~

9.增加自定義屬性:ClassWizard->AutoMation->Add Property加上一個(gè)變量m_interval,類型為short,對(duì)應(yīng)外部變量為Interval。在CClockCtrl中增加OnIntervalChanged方法。添加如下代碼:

?? if(m_interval<0 || m_interval>6000)

?{

? m_interval=1000;

?}

?else

?{

? m_interval=m_interval/1000*1000;

? KillTimer(1);

? SetTimer(1,m_interval,NULL);

? BoundPropertyChanged(0x1);

?}

?10.測(cè)試:Control->Invoke Methods

?11.將時(shí)間間隔加到屬性頁(yè)中,在資源視圖中加入一文本框和編輯框。為EditBox關(guān)聯(lián)成員變量,加入屬性interval

?12.增加方法:ClassWizard->AutoMation->Add Method->Hello加入代碼?OK!在VB中可以調(diào)用此方法!

?? void CClockCtrl::Hello()

{

?// TOD Add your dispatch handler code here

?MessageBox("Hello world!");

}

?13.增加事件:ClassWizard->AutoMation->Add Events->Click

?14.增加自定義事件:ClassWizard->AutoMation->Add Events->NewMinute

? ????在新的一分鐘到達(dá)時(shí)發(fā)出這個(gè)通知,在OnDraw()中寫代碼:

?????? CTime time=CTime::GetCurrentTime();

?if(0==time.GetSecond())

?{

? FireNewMinute();

?}

15.Interval屬性具有持久性。在CClockCtrl::DoPropExchange()中調(diào)用PX_short()方法,OK

??? PX_Short(pPX,"Interval",m_interval,1000);

16.Property PageProperty屬性中的interval保持一致的方法:在OnIntervalChanged()中調(diào)用BoundPropertyChanged(0x1);

17.希望控件在設(shè)計(jì)時(shí)間內(nèi)不走動(dòng)的方法:在OnTimer()中,if(AmbientUserMode())InvalidateControl();巧妙!

?

?

三:VC中調(diào)用X控件

1.新建ClockTest對(duì)話框應(yīng)用程序

2.點(diǎn)擊右鍵->插入X控件->時(shí)鐘控件

3.Project->Add Component會(huì)生成CClock類。

4.CCLockTestDlg中增加CClock類的成員變量m_clock,然后可以動(dòng)態(tài)創(chuàng)建一個(gè)這樣的東東!

5.試驗(yàn)Click(),NewMinute(),SetBkColor(),SetForeColor()方法和屬性

6.如何為動(dòng)態(tài)創(chuàng)建的控件做事件響應(yīng)呢?首先你得知道它的ID號(hào),然后參考非動(dòng)態(tài)的控件事件代碼。

?

下面是具體的代碼:

1創(chuàng)建一個(gè)MFC ActiveX ControWizard項(xiàng)目,什么都不用做,直接運(yùn)行,就能有一個(gè)Activex控件了,其作用是生成一個(gè)橢圓

運(yùn)行,直接注冊(cè)到了系統(tǒng),所以在別的地方能夠找到生成的ActiveX控件

這里在VS2008中的VB來(lái)測(cè)試。

右鍵---->選擇項(xiàng)---->

?

此時(shí)工具箱就多了一個(gè)控件

拖動(dòng)到窗口,效果如下:

項(xiàng)目文件Debug中含有:

?

在運(yùn)行 輸入

然后把上面的ocx文件拖進(jìn)去,按確定,反編譯,使得從注冊(cè)表中移除

?

?

然后運(yùn)行MFCXXX,找不到ActiveX找不到控件

?

使用Tools下的Register Contrl可以注冊(cè)ActiveX

或者運(yùn)行 regsvr32? 再把ocx文件拖進(jìn)來(lái) 就可以注冊(cè)了,跟上面一樣,只是去掉了/u

?

下面開始做自己的|ActiveX了

[cpp]?view plaincopy

  • void?CATestCtrl::OnDraw(??

  • ????????????CDC*?pdc,?const?CRect&?rcBounds,?const?CRect&?rcInvalid)??

  • {??

  • ????//?TODO:?Replace?the?following?code?with?your?own?drawing?code.??

  • ????//pdc->FillRect(rcBounds,?CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));??

  • ????//pdc->Ellipse(rcBounds);??

  • ????//上面兩句是默認(rèn)的,畫橢圓??

  • ????CTime?c=CTime::GetCurrentTime();??

  • ????CString?cstring=c.Format("%H:%M:%S");??

  • ????pdc->TextOut(0,0,cstring);??

  • }??


  • 一個(gè)靜止的時(shí)間,要想它動(dòng)態(tài)的顯示,還得加上SetTimer函數(shù)和wm_timer

    在CXXctrl中添加一個(gè)WM_CREATE然后里面Settimer

    SetTimer(1,1000,NULL);

    添加wm_timer

    [cpp]?view plaincopy

  • void?CATestCtrl::OnTimer(UINT?nIDEvent)???

  • {??

  • ????//?TODO:?Add?your?message?handler?code?here?and/or?call?default??

  • ??????

  • ????//Invalidate();??

  • ????InvalidateControl();??

  • ????COleControl::OnTimer(nIDEvent);??

  • }??


  • 這個(gè)時(shí)候就能顯示一個(gè)動(dòng)態(tài)顯示的時(shí)鐘了

    ?

    在VB中使用剛剛新建的ActiveX,發(fā)現(xiàn)只有很少的屬性

    這個(gè)時(shí)候? 我們可以添加自己的屬性:

    ?

    這個(gè)時(shí)候,VS中VB可以顯示響應(yīng)的屬性了

    ?

    此時(shí)在OnDraw中 要相應(yīng)的添加代碼,要不然,設(shè)置了背景色和前景色都不起作用

    [cpp]?view plaincopy

  • CBrush?cbrush(TranslateColor(GetBackColor()));??

  • ????pdc->FillRect(rcBounds,&cbrush);??

  • ????pdc->SetBkMode(TRANSPARENT);??

  • ????pdc->SetTextColor(TranslateColor(GetForeColor()));??


  • ?

    [cpp]?view plaincopy

  • void?CATestCtrl::OnDraw(??

  • ????????????CDC*?pdc,?const?CRect&?rcBounds,?const?CRect&?rcInvalid)??

  • {??

  • ????//?TODO:?Replace?the?following?code?with?your?own?drawing?code.??

  • ????//pdc->FillRect(rcBounds,?CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));??

  • ????//pdc->Ellipse(rcBounds);??

  • ????//上面兩句是默認(rèn)的,畫橢圓??

  • ??

  • ??

  • ????CBrush?cbrush(TranslateColor(GetBackColor()));??

  • ????pdc->FillRect(rcBounds,&cbrush);??

  • ????pdc->SetBkMode(TRANSPARENT);??

  • ????pdc->SetTextColor(TranslateColor(GetForeColor()));??

  • ??

  • ????CTime?c=CTime::GetCurrentTime();??

  • ????CString?cstring=c.Format("%H:%M:%S");??

  • ????pdc->TextOut(0,0,cstring);??

  • }??


  • 手動(dòng)添加屬性頁(yè)

    [cpp]?view plaincopy

  • BEGIN_PROPPAGEIDS(CATestCtrl,?2)??

  • ????PROPPAGEID(CATestPropPage::guid)??

  • ????PROPPAGEID(CLSID_CColorPropPage)??

  • END_PROPPAGEIDS(CATestCtrl)??


  • ?

    ?

    添加自定義屬性:

    ?

    [cpp]?view plaincopy

  • void?CATestCtrl::OnJianGeChanged()???

  • {??

  • ????//?TODO:?Add?notification?handler?code??

  • ??

  • ????if(m_jianGe<0||m_jianGe>6000)??

  • ????{??

  • ????????m_jianGe=1000;??

  • ????}??

  • ????else??

  • ????{??

  • ????????m_jianGe=m_jianGe/1000*1000;??

  • ????????KillTimer(1);??

  • ????????SetTimer(1,m_jianGe,NULL);??

  • ????}??

  • ????SetModifiedFlag();??

  • }??


  • ?

    屬性面板的 有的能看間JianGe有的不能看到

    將這個(gè)添加到屬性頁(yè)去

    添加關(guān)聯(lián)

    ?

    最后一項(xiàng)是屬性名

    ?

    ?可以為ActiveX添加(標(biāo)準(zhǔn)的和自定義的)事件和函數(shù)。

    ?

    ?MFC中添加該類


    轉(zhuǎn)載于:https://my.oschina.net/u/1469992/blog/227506

    總結(jié)

    以上是生活随笔為你收集整理的MFC(ActiveX编程,孙鑫C++第十八讲笔记整理)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 视频一区三区 | 无码人妻精品一区二区三区夜夜嗨 | 亚洲av片在线观看 | 先锋资源久久 | 久久久久久久久久免费视频 | 韩日少妇| 中文字幕人妻一区二区三区视频 | 久久av一区二区三区亚洲 | 青青草国产 | 欧美成人a视频 | 久久免费看少妇高潮 | 97理伦 | 国产精品电影院 | 超碰在线进入 | 久久久久亚洲精品中文字幕 | 香蕉伊人网 | 国产专区一| 肥老熟妇伦子伦456视频 | 91精品欧美| 日韩欧美成人网 | 天天摸天天操天天干 | 美女视频久久久 | 一区二区精品区 | 午夜福利一区二区三区 | 99久久精品免费看 | 在线免费日韩 | 精品国产乱码久久久久久图片 | 丁香婷婷色 | 肉嫁高柳家 高清 | 国产尤物在线观看 | 丝袜视频一区 | 国产欧美一区二区三区在线看蜜臀 | 日本黄色的视频 | 疯狂做受xxxx高潮人妖 | 国产精品av在线 | 国产精品伦一区二区三级古装电影 | 无码播放一区二区三区 | 国产激情久久久 | 久久综合国产精品 | 亚洲高清天堂 | 亚洲综合福利 | 裸体裸乳被免费看视频 | 人妻丰满熟妇av无码区 | 想要xx视频 | 中文字幕无码毛片免费看 | 中文字av| 国产鲁鲁视频在线观看特色 | 69精品一区二区 | 欧美一区二区人人喊爽 | 红桃视频网站 | 在线视频国产一区 | 国产不卡视频在线播放 | 欧美做受高潮动漫 | 日韩经典在线观看 | 最新国产拍偷乱偷精品 | 日韩精品人妻无码一本 | 不卡一区二区在线观看 | 日韩黄色免费视频 | 国产熟女精品视频 | 日韩黄色一级片 | 99自拍偷拍视频 | 日韩一区二区视频在线播放 | 日韩xxx高潮hd | 天堂成人网 | 大地资源二中文在线影视免费观看 | 免费在线观看网址 | www.久久艹 | 17c在线视频 | 羞羞的网站在线观看 | 嫩草网站 | 久久久久久久亚洲精品 | 久久精品伦理 | 亚洲17p| 午夜一区二区三区四区 | 亚洲精品字幕在线观看 | 日韩精品一区二区亚洲av观看 | 免费不卡av | 91大神网址| 国产精品第二十页 | 免费看成年人视频 | 国产宾馆自拍 | 人人爽人人香蕉 | 欧美色图第一页 | 成人国产一区 | 黄瓜视频在线播放 | 久久国产色 | 国产精品精 | 久久久久婷婷 | 日本乱大交xxxx公交车 | 99视频在线| 精品女厕偷拍一区二区 | 日本黄色生活片 | 久久精品99国产国产精 | 中文字幕视频免费观看 | 色哟哟免费视频 | 黄色录像一级大片 | 色吧在线观看 | 无码精品国产一区二区三区 | 男人靠女人免费视频网站 |