MapX在VisualC++中運行方法與技巧

來源:互聯網
上載者:User

  在VisualC++中使用MapX的方法不同於VisualBasic和C++Buildel;在VisualC++中,每個MapX對象是一個C++類,這些類在MapX.h檔案中聲明,在MapX.cpp檔案中實現
這些C++類的名稱與MapX對象的名稱相同,在對象名稱前面加上CMapX就構成了類各例如,資料集(Dataset)對象對應的類名為CMapXDataset。
17.1.1  訪問MapX的屬性
    MapX對象的屬性是通過C++類的成員函數GIS來實現的。例如,像資料集對象的可讀/寫屬性Name是由CMapXDataset類中的兩個成員函數實現的:一個用於設定屬性的值,另一個
用於得到屬性的值。這些成員函數的名稱是在屬性名稱前加Get或Set而成。
    例如:
    CString GetName();

      CMapX  m_ctrlMapX;
    }
    然後需要為MapX建立一資源ID來代表該控制項。其步驟如下:
    (1)選擇View菜單的ResourceSymbols命令,開啟ResourceSymbols對話方塊。
    (2)在ResourceSymbols對話方塊中單擊New命WebGIS出NewSymbol對話方塊。
    (3)在NewSymbol對話方塊中輸入IDC_MAP作為名稱。
    通過類嚮導建立CMapxSampleView類的WM_CREATE和WM_SIZE訊息映射函數,然後切換到MapxSampleView.cpp中,在CMapxSampleView::OnCreate中加入如下所列的代碼GPS建立地圖;
    //--------------------------------------------------------------
    int CMapxSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        if(CView::OnCreate(lpCreateStruct)  ==  -1)
        retrun -1;
//使用預設的大小建立地圖,在resize訊息影射函數中調整地圖的大小,使它充滿整個//客戶區

字串8

        if(!m_ctrlMapX.Create(NULL,WS_VISIBLE,CRect(0,0,100,100),this,IDC_MAP))
                return -1;
    return 0;
   }
在CMapxSampleview::OnSize中加入如下所示的代碼,用於調整地圖的大小:
void CMapxSampleview::OnSize(UINT nType, int cx, int cy)
{
        CView::OnSize(nType, cx, cy);
        //調整地圖的大小,使它充滿整個客戶區
        if(cx != 0 && cy != 0)
                m_ctrlMapX.MoveWindow(0,0,cx,cy,TRUE);
}
    同樣通過類嚮導建立WM_SETFOCUS訊息映射函數,在其中加入如下所列的代碼,用於確保視窗擷取焦點時,地圖控制項獲得焦點:
void CMapxSampleview::OnSetFocus(CWnd* pOldWnd)
{
        CView::OnSetFocus(pOldWnd); 字串6
        m_ctrlMapX.SetFocus();
}
  至此,應用程式的基本架構已經完成。可以編譯並運行程式了。其程式運行介面17.1所示。
但是上面的程式只能顯示地圖,除此之外沒有其他任何功能。下面我們要加入放大、縮小、漫遊、選擇等功能。
    開啟IDR_MAPXSATYPE菜單,在“查看”菜單中加入如下所列的功能表項目:
      上一個視圖,ID_CONTEXT_PREVIOUSVIEW
    整個地圖,   ID_VIEW_VIEWENTIREMAP
    分隔字元號
    屬性... ,   ID_VIEW_PROPERTIES
    圖層控制,  ID_VIEW_LAYERCONTROL
    分隔字元號...
    然後加入一“工具”菜單,在該菜單中加入如下一些功能表項目:
    箭頭,      ID_MAP_TOOL_ARROW
    分隔字元號
    放大,    ID_MAP_TOOL_ZOOMIN
    void SetName{LPCTSTR);
    唯讀屬性只有Get成員函數,而沒有Set成員函數。
17.1.2  訪問MapX的方法
    MapX對象的方法通過與該方法同名的成員函數實現。許多方法的參數是const VARIANT&,這意味著成員函數要求傳遞一個類型為VARIANT的變數。
    同時許多方法的一些參數對於像VisualBasic或其他指令碼語言來說是可選擇的,但是在Visual C++中,當調用這些方法時,必須設定所有的參魏所有的選擇性參數都是VARIANT 字串4
類型。可以利用如下方法調用帶選擇性參數的MapX方法:
    VARIANT vtOptional;
    vtOptional.Vt = VT_ERROR;
    vtOptional.scode = DISP_E_PARAMNOTFOUND;
    為了在方法中便於調用標準的C++類型而不是VARIANT,在MapX.h和MapX.cpp中重載了大多數MapX方法但是一些方法沒有重載,如果需要使用,使用者可以自己重載這些
方法。
    在MapX.h中的C++類都是從MFC的COleDispatchDriver類派生而米  所有的屬性和方法最終都調用IDispatch->Invoke()來告訴MapX的OCX做什麼COleDispatchDriver通常能正確調用從屬性或方法返回的IDispatch指標的Release()函數,但是還是有一些需要特別
注意的地方。當一MapX對象通過它的IDispatch介面被傳遞給一事件控制代碼時,必須確保不
要釋放該指標,因為傳遞給事件的對象沒有調用AddRef函數來增加引用計數。
    17.2  建立MapX控制項
    本節將通過建立一個MapX應用程式來介紹如何在VisualC++中建立MapX控制項。
    [執行個體17.1]  首先選擇File菜單中的New命令,彈出New對話方塊。選擇MFCAppWizard(exe),並在ProjectName中輸入MapxSample作為工程名稱。然後單擊OK按鈕,進入應用程式嚮導的第一步。通過應用程式嚮導建立一多重文件介面應用程式。 字串5
    在建立MapX控制項之前,必須將MapX.h和MapX.cpp檔案加入到工程中。對於Visual C++5.0及以上版本,從Project菜單中選擇Add To Project > Files命令,開啟InsertFiles into Project對話方塊,選擇MapX.cpp和MapX.h檔案加入到工程中。
    注意:不要選擇Project菜單中的Add TO Project > Components And Controls命令。如果選擇該命令加入MapX控制項,將建立一新的.cpp丈件,但是該文本沒有
    包括所有的MapX對象。
    在工程中加入MapX.h和MapX.cpp檔案後,在包含該控制項的MapxSarnpleView中加入MapX對象的標頭檔。如下所列:
    #include "MapX.h"
    ClaSS  CMapxSampleVieW : publiC  CView
    {
         protected;

  縮小,   ID_MAP_TOOL_ZOOMOUT
    漫遊,    ID_MAP_TOOL_PAN
    置中,    ID_MAP_TOOL_CENTER
    分隔字元號
    選擇,    ID_MAP_TOOL_SELECT
    圓選,    ID_MAP_TOOL_RADIUSSELECT
    矩形選,  ID_MAP_TOOL_RECTANGLESELECT
    分隔字元號
    距離,    ID_MAP_TOOL_DISTANCETOOL
    資訊,    ID_MAP TOOL_INFOTOOL
    通過類嚮導,建立這些命令的ON_COMMAND訊息映射函數,在其中加入如下所列的代碼:
    //--------------------------------------------
    void CMapxSampleView :: OnViewViewentiremap()
    {
       m_ctrlMapX.SetZoom(m_ctrtMapX.GetGeoSetWidth());

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.