close

專案類型 -> MFC -> MFC ActiveX控制項

專案名稱: ActiveXTest

類別檢視->CActiveXTestCtrl->新增兩個成員變數 _a 和 _b

int _a;

int _b;

開啟CActiveXTestCtrl建構函式 CActiveXCtrl(void)

_a初始化成12, _b初始化成16

修改OnDraw函式: [類別檢視]->CActiveXTestCtrl->搜尋OnDraw函式並滑鼠雙擊

void CActiveXTestCtrl::OnDraw(
            CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
    if (!pdc)
        return;

    // TODO: 請用您自己的繪圖程式碼取代下列程式碼。
    //pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
    //pdc->Ellipse(rcBounds);
    CBrush brush1, brush2;
    brush1.CreateSolidBrush(0xFFFFFF);    // 白色
    pdc->FillRect(rcBounds, &brush1);
    brush2.CreateSolidBrush(0x000000);   // 黑色
    pdc->SelectObject(brush2);

    //3個圓心
    POINT p1 = {35, 40};
    POINT p2 = {195, p1.y};
    POINT p3 = {(p1.x+p2.x)/2, p1.y-60};
    int radius = 15;
    //繪製3個圓
    pdc->Ellipse(p1.x-radius, p1.y-radius, p1.x+radius, p1.y+radius);
    pdc->Ellipse(p2.x-radius, p2.y-radius, p2.x+radius, p2.y+radius);
    pdc->Ellipse(p3.x-radius, p3.y-radius, p3.x+radius, p3.y+radius);
    // 連線
    pdc->MoveTo(p1);
    pdc->LineTo(p3);
    pdc->LineTo(p2);
    CString msg;
    pdc->SetBkMode(TRANSPARENT);
    pdc->SetTextAlign(TA_CENTER);
    // 輸出數位
    pdc->SetTextColor(0xFFFFFF);
    msg.Format(_T("%d"), _a);
    pdc->TextOutW(p1.x, p1.y-9, msg, msg.GetLength());
    msg.Format(_T("%d"), _b);
    pdc->TextOutW(p2.x, p2.y-9, msg, msg.GetLength());
    msg.Format(_T("%d"), _mcd(_a, _b));
    pdc->TextOutW(p3.x, p3.y-9, msg, msg.GetLength());

}

加入函式_mcd(a, b)

int CActiveXTestCtrl::_mcd(int a, int b)
{
    if(b==0)
        return a;
    return _mcd(b, a%b);
}

-------------------------------------------------------------------------------------------------------------

編譯Visual Studio得到下列檔案, Visual Studio會自動幫ActiveXTest.ocx元件註冊

 選擇[工具]->ActiveX控制項測試容器: 用來測試剛才編譯完成的ActiveXTest.ocx

插入新控制項(Insert New Control)

點選ActiveXTestControl

開啟後, 可以看到OnDraw()的畫面

-------------------------------------------------------------------------------------------------------------

新增一個方法SetNumbers, 用來設定_mcd()函式中的兩個參數(int a, int b)

 

類別檢視 -> ActiveXTestLib->_DActiveXTest->點選左下角視窗SetNumbers(SHORT a, SHORT b)

->滑鼠反白SetNumbers->按右鍵移至定義

跳出提示視窗,選擇ActiveXTestCtrl.cpp

void CActiveXTestCtrl::SetNumbers(SHORT a, SHORT b)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    // TODO: 在這裡加入您的分派處理常式程式碼

    _a = a;
    _b = b;
    Invalidate();
}

重新建立專案, 開啟ActiveX控制項測試容器->控制項

->呼叫方法, 方法名稱的下拉選單選擇SetNumbers, 設定a=130, b=13並按下[叫用],

則人機介面會立即更新顯示

--------------------------------------------------------------------------------------------------------------

開啟BCB6, 選擇Component->Import ActiveX Control

選擇ActiveXTest元件, 按下install按鈕

點選ActiveX Tab頁面, 可以看到剛剛安裝的ActiveXTest元件(標記為OCX),

滑鼠點選OCX新增該元件至Form1頁面

按下Button1後

ActiveXTest1->SetNumbers(Edit1->Text.ToInt(), Edit2->Text.ToInt());

--------------------------------------------------------------------------------------------------------------

windows->開始輸入regedit, 呼叫登錄編輯程式

下拉[編輯]->[搜尋]->輸入關鍵字ActiveXTest, 可以搜尋到剛剛Visual Studio所編譯出來的ActiveX元件

滑鼠雙擊[預設值], 可以得到CLSID, 即該元件在本機器的註冊碼{F2F26ADB-B616-4826-95EE-B71218541C6E}

windows->開始輸入cmd, 接著輸入regsvr32跳出提示如下

--------------------------------------------------------------------------------------------------------------

刪除ActiveXTest.ocx註冊, 請輸入

regsvr32 /u ActiveXTest.ocx

重新註冊ActiveXTest.ocx, 請輸入

regsvr32 ActiveXTest.ocx

 

原始程式:ActiveXTest.zip

            BCBCallVCActiveXTest.zip

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 me1237guy 的頭像
    me1237guy

    天天向上

    me1237guy 發表在 痞客邦 留言(1) 人氣()