• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VISUAL C++中的OCX控件的使用方法

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    新一代32位操作系統 WINDOWS 95舍棄了 VB X控件,取而代之的是OCX控件。OCX控件具有功能強大,界面美觀的特點,然而許多參考書中并沒有詳細闡述OCX控件的使用方法,使得一些如 數據庫 表格,遠程數據控件等接口復雜的OCX難于使用。這里將詳細闡述OCX的使用方
      新一代32位操作系統WINDOWS 95舍棄了VBX控件,取而代之的是OCX控件。OCX控件具有功能強大,界面美觀的特點,然而許多參考書中并沒有詳細闡述OCX控件的使用方法,使得一些如數據庫表格,遠程數據控件等接口復雜的OCX難于使用。這里將詳細闡述OCX的使用方法。
      首先提醒讀者要注意的是:使用OCX構件之前,必須登記注冊,否則不能使用。安裝VISUAL C++時,系統自動注冊登記軟件附帶的OCX控件。如果不幸沒有登記,那么請使用REGSVR32應用程序來注冊。以VISUAL C++ 5.0為例,用AppWizard生成MFC應用程序分為六個步驟,其中第三個步驟中可以指定支持OLE控制,也就是我們要使用的OCX控件(是OLE的一種)。如果指定該選項,則AppWizard將自動向應用程序添加以下兩處代碼。
      一處是為了說明OLE自動類如ColeDispathcDriver,自動向Stdafx.h中加入頭文件afxdisp.h
      二是在InitInstance函數中激活OLE控制容器:
        AfxEnableContainer();
    如果在利用AppWizard創建應用程序是未指定OLE控制選項,則可以手工加入以上兩行代碼。
        在生成應用框架后,首先應向應用程序加入OCX控件對應的類,如遠程數據控件的缺省名為RDC,而數據表格的缺省名為MSDBGRID。加入的過程是選擇Project菜單項,選擇Add to Project,選擇Components and Controls項,選擇Registered ActiveX Controls項,
    雙擊你要加入的構件。
        然后,通常是在對話框中加入OCX控制,這時應在對話框中單擊右鍵,選擇Insert ActiveX Controls,選擇你要加入的控件。這里以遠程數據控件為例。
    可以在設計時設定屬性,當然,在運行時刻再設置屬性值更具有靈活性。屬性中比較關鍵的是這幾個:

    (1)    CursotDriver:(2)DataSourceName (3)SQL。具體的設置見所附的程序。

    以下程序是一個無模式對話框的源代碼:此程序段實現了一個與FOXPRO數據源相連接的遠程數據控件和一個與遠程數據庫控件相連的瀏覽數據庫用的表格。數據源(DataSource)名稱為“檔案”,其中包含幾個表(Table),程序中選擇的是表2。用戶當然也可以很輕松的在運行時刻改變連接對應的SQL屬性,以便能夠瀏覽同一數據庫的不同表格,或是不同數據庫的不同表格。數據源的建立方法為:控制面板->32位ODBC->ADD…。

    // Datatab.cpp : implementation file
    #include "stdafx.h"
    #include "Datatab.h"
    #include <afxcmn.h>
    #include <afxcview.h>

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif

    //////////////////////////////////////// CDatatab dialog

    CDatatab::CDatatab(CView * pView):CDialog()
    {
        m_pView = pView;
    }

    BOOL CDatatab::Create()
    {
        return CDialog::Create(CDatatab::IDD);
    }

    CDatatab::CDatatab(CWnd* pParent /*=NULL*/)
        : CDialog(CDatatab::IDD, pParent)
    {
        //{{AFX_DATA_INIT(CDatatab)
        //}}AFX_DATA_INIT
    }


    void CDatatab::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CDatatab)
        DDX_Control(pDX, IDC_REMOTEDATACTL1, m_rdc1);
        DDX_Control(pDX, IDC_DBGRID1, m_grid1);
        //}}AFX_DATA_MAP
    }

    BEGIN_MESSAGE_MAP(CDatatab, CDialog)
        //{{AFX_MSG_MAP(CDatatab)
        ON_WM_CLOSE()
        ON_WM_PAINT()
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    /////////////////////////////// CDatatab message handlers

    void CDatatab::OnClose()
    {
        // TODO: Add your message handler code here and/or call default
        DestroyWindow();    
        CDialog::OnClose();
    }

    void CDatatab::OnPaint()
    {
        CPaintDC dc(this); // device context for painting
        // TODO: Add your message handler code here
        // Do not call CDialog::OnPaint() for painting messages
    }

    BOOL CDatatab::OnInitDialog()
    {
        CDialog::OnInitDialog();
        
        // TODO: Add extra initialization here
        m_rdc1.SetDataSourceName("檔案");
        m_rdc1.SetSql(_T("SELECT 姓名 年齡 出生日期,from 表2"));
        m_rdc1.SetCaption("數據倉庫");
        m_rdc1.SetUserName(_T("admin"));
        m_rdc1.SetPassword(_T(""));
        m_rdc1.SetCursorDriver(1);
        m_rdc1.Refresh();

        LPUNKNOWN pCursor=GetDlgItem(IDC_REMOTEDATACTL1)->GetDSCCursor();
        ASSERT(pCursor!=NULL);
        m_grid1.SetDataSource(pCursor);    //bind the grid
        m_grid1.BindProperty(0x9,GetDlgItem(IDC_REMOTEDATACTL1));

        return TRUE; // return TRUE unless you set the focus to a control
    }

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>