ActiveX插件點滴

什麼是容器和服務器程序?

容器應用程序是可以嵌入或鏈接對象的應用程序。Word就是容器應用程序。
服務器應用程序是創建對象並且當對象被雙擊時,可以被啓動的應用程序。Excel就是服務器應用程序。


AxtiveX
後綴可以是OCX或者DLL等
四種屬性:
Stock:爲每個控件提供的標準屬性,如字體或顏色。
Ambient:圍繞控件的環境屬性——已被置入容器的屬性。這些屬性不能被更改,但控件可以使用它們調整自己的屬性。
Extended:這些是由容器處理的屬性,一般包括大小和在屏幕上的位置。
Custom:由控件開發者添加的屬性。


第一步:新建工程爲:MFC ActiveX ControlWizard
第二步:
  How many controls would you like your project to have?
意思是,再控件做成後,其他程序加載此控件後產生的應用圖標按鈕個數

Would you like the controls in this project to have a runtinme license?
是否生成一個控件的運行時許可,用以給該控件進行限制應用
第三步:直接保持默認


如何刪除已經註冊的ACTIVEX控件信息?
1.打開運行-》輸入regsvr32 /u ->之後將您剛纔註冊的控件拖動到運行框體裏面(注意內容與/u保持一個空格距離)
這樣就刪除成功了
同樣的將/U 去掉,則是向系統註冊此控件
2.在vc6.0 編譯器的TOOLS菜單項下,Register Control

 

 


怎麼樣在製作的控件背面特性框加一個顏色屬性頁需要?
BEGIN_PROPPAGEIDS(CClockCtrl, 2)--》注意,原來是1,現在多加了一項,改爲2
 PROPPAGEID(CClockPropPage::guid)
 PROPPAGEID(CLSID_CColorPropPage)--》加上此句
END_PROPPAGEIDS(CClockCtrl)
(CLSID_CColorPropPage)顏色全球唯一標識符


如何初始化你 的控件屬性對應的變量默認值?
BOOL PX_Short( CPropExchange* pPX, LPCTSTR pszPropName, short& sValue );

BOOL PX_Short( CPropExchange* pPX, LPCTSTR pszPropName, short& sValue, short sDefault);


void CClockCtrl::DoPropExchange(CPropExchange* pPX)
{
 ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
 COleControl::DoPropExchange(pPX);
 PX_Short(pPX,"Interval",m_interval,1000);---》此句僅限制於short類型的屬性
}

 

如何設置定時器?
int CClockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (COleControl::OnCreate(lpCreateStruct) == -1)
  return -1;
 
 // TODO: Add your specialized creation code here
 SetTimer(1,m_interval,NULL);
 
 return 0;
}

void CMainFrame::OnStartTimer()
{
   m_nTimer = SetTimer(1, 2000, 0);
}

void CMainFrame::OnStopTimer()
{
   KillTimer(m_nTimer);   --》停止計時器
}

 

如何判斷程序已經進入運行時再進行事件的觸發?
COleControl::AmbientUserMode
BOOL AmbientUserMode( ); ---》如果返回爲0,則是在設計模式

COleControl::InvalidateControl---》強制控件自身重繪

void InvalidateControl(
LPCRECT lpRect = NULL, ---》如果爲NULL,則使整個窗口重繪
BOOL bErase = TRUE );

void CClockCtrl::OnTimer(UINT nIDEvent)
{
 
 if(AmbientUserMode())
  InvalidateControl();
 COleControl::OnTimer(nIDEvent);
}


如何將生成的控件後,其他程序可以保存屬性裏的值?
void BoundPropertyChanged( DISPID dispid );

void CClockCtrl::OnIntervalChanged() ---》這是一個屬性設置後的方法
{
 // TODO: Add notification handler code
 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);--》此函數用於保存設置的改變
 }
 SetModifiedFlag();
}


如何設置控件背景顏色、前景顏色?

OLE_COLOR GetForeColor( );
COleControl::GetBackColor

COLORREF TranslateColor( ---》將OLE_COLOR 轉換爲COLORREF
OLE_COLOR clrColor,
HPALETTE hpal = NULL );


void CClockCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
 CBrush brush(TranslateColor(GetBackColor()));
 pdc->FillRect(rcBounds, &brush);
 pdc->SetBkMode(TRANSPARENT);---》設置背景顏色不會改變在自繪前
 pdc->SetTextColor(TranslateColor(GetForeColor()));--》設置前景文字顏色

 CTime time=CTime::GetCurrentTime();
 if(0==time.GetSecond())
 {
  FireNewMinute();
 }
 CString str=time.Format("%H:%M:%S");
 pdc->TextOut(0,0,str);
}
colecontrol
activecontrol

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章