CAD右ポップアップメニュー(COMインターフェース)

ユーザーは、右のポップアップメニューに必要な、あなたは右のボタンを押した後、マウスイベントに応答する必要がある、ポップアップメニューが操作に分けて、コマンドで非コマンドで実行され、(C#言語リファレンスの例を以下に詳細に説明されている:「サンプル\ CSharpRightKeyMenu \ CSharpRightKeyMenu.sln」 ):


1、新しいメニューファイル


新しいテキストファイル(このファイルは、コマンドメニューから実行される)は、次のようにmxpoptest.mnuは、読み取ります。


//記述ファイルヘッダのメニューバー。
//「ファイルの種類の文字列」「リソースファイル名」「透明色」「の位置であってもよい:トップ、左、下、右、」
「MxDrawMenuBarFile」「MxDraw.dll」(214 211 206)「トップ」「ポップアップメニュー2」

//メニューの説明
//「コマンド名」「注文」「アイコンインデックスの文字列」「リソース・ファイル名」「」プロンプト文字列をコマンド「コマンドID」、「IDタイプ」」コマンド実行機能「の前にあるかどうかを
」POPMENUS「」オブジェクト(&O)「
」OK「」「」「」「」OK「」「」ID_OK_BUTTONは「
//」キャンセル「」「」「」「」「」「」キャンセルID_CANCLE_BUTTON「
」キーワード「」「」「」「」キーワード「」「」ID_KEYWORD_BUTTON」
"セパレータ" 
"テスト(&E)" "テスト" "" "" "编辑文字" "55" "" "Y" 
"POPMENUE"


ここでのキーワードは、コマンドラインプロンプトのコマンドです。


新しいテキストファイル:次のようにMxPopMenuEnt.mnuは、読み込み(このファイルには、メニューをクリックして実行するための非実体のコマンドです):


//記述ファイルヘッダのメニューバー。
//「ファイルの種類の文字列」「リソースファイル名」「透明色」「の位置であってもよい:トップ、左、下、右、」
「MxDrawMenuBarFile」「MxDraw.dll」(214 211 206)「トップ」「ポップアップメニュー2」

//メニューの説明
//「コマンド名」「注文」「アイコンインデックスの文字列」「リソース・ファイル名」「」プロンプト文字列をコマンド「コマンドID」、「IDタイプ」
」 POPMENUS ""オブジェクト(&O) " 
"を削除(&E) "" _erase "" IDB_ERASE_BITMAP " 
"複製(&Y) "" _copy "" IDB_COPY_BITMAP " 
"移動(&V) "" _move "" IDB_MOVE_BITMAP " 
"回転(&R) " "_rotation" "IDB_ROTATION_BITMAP" 
"ズーム(&L)" "_Scale " "IDB_SCALE_BITMAP" 
"セパレータ" 
"对象特性(&O)" "Mx_ShowProperties" "IDB_PROPERTY_BITMAP" "PropertyEditor.mrx" 
"セパレータ" 
"用户自加命令(&U)" "" "" "" "" "99" 
" POPMENUE」


新しいテキストファイル:次のようにMxPopMenu.mnuは、(このファイルは非実体のコマンドなし右クリックメニューで実行される)読み取ります。


//記述ファイルヘッダのメニューバー。
//「ファイルの種類の文字列」「リソースファイル名」「透明色」「の位置であってもよい:トップ、左、下、右、」
「MxDrawMenuBarFile」「MxDraw.dll」(214 211 206)「トップ」「ポップアップメニュー1」

//メニューの説明
//「コマンド名」「注文」「アイコンインデックスの文字列」「リソース・ファイル名」「」プロンプト文字列をコマンド「コマンドID」、「IDタイプ」
」 POPMENUS ""ポップアップメニュー。1(&V) " 
"新規(&N) "" Mx_New "" IDB_NEW_BITMAP "" MxEdit.mrx "" "" "" ID_NEW_BUTTOM " 
"オープン(&O) "" Mx_OpenMxg " " IDB_OPENMXG_BITMAP "" "" " "" "ID_OPEN_BUTTOM" 
"(R&)再描画" "レ" "IDB_REGEN_BITMAP"
"SEPARATOR" 
"リアルタイムスケーリング(&Z-)" "ZoomR" "IDB_ZOOM_BITMAP" 
"SEPARATOR" 
"戻る" "Zoomp" "ID_PRVVIEW_BITMAP" 
"ズームウィンドウ(&W)" "WindowZoom" "IDB_ZOOMW_BITMAP" 
"範囲のスケーリング(&E)" " ZoomE "" IDB_ZOOME_BITMAP " 
"ビューポート変換(&P) "" P " " IDB_PAN_BITMAP」IDB_ZOOME_BITMAP " "ビューポート変換(&P) "" P " " IDB_PAN_BITMAP」IDB_ZOOME_BITMAP " "ビューポート変換(&P) "" P " " IDB_PAN_BITMAP」
"视区旋转(&L)" "Mx_Plan" "IDB_PLAN_BITMAP" "MxEdit.mrx"  
"セパレータ" "セパレータ" "セパレータ"
"鸟瞰(&D)" "DsViewer" "IDB_DSVIEWER_BITMAP" 
"放大镜(&M)"、 "拡大鏡" "IDB_MAGNIFYINGCLASS_BITMAP" 
"セパレータ" 
「视区背景色(&C)」 "_ViewColor" "IDB_VIEWCOLOR_BITMAP" 
"线重(&S)" "_ShowLineWeight" "IDB_LINEWEIGHT_BITMAP" 
"绘图模式(&A)" "_DrawModle" "IDB_DRAWMODLE_BITMAP" 
"全屏显示(&F)" "MxFullScreen" "IDB_FULLSCREEN_BITMAP" 
"SEPARATOR" 
"用户坐标系(&U)" "Mx_Ucs" "IDB_UCS_BITMAP" "MxEdit.mrx" 

"POPMENUE」


次のように最初の行は、各列のファイルメニューファイルヘッダです。


ファイルの種類の文字列 リソース・ファイル名(DLLからロードの後ろにデフォルトのメニューアイコン) 透明色のアイコン 場所 メニュー名
"MxDrawMenuBarFile" "MxDraw.dll" (214 211 206) "上" 「ポップアップメニュー」


「//」ファイルにコメントしています

各行後のファイルは、メニュー項目を表し

「POPMENUS」「オブジェクト(&O)は、」ポップアップメニューの始まりを表し、

「POPMENUEは、」ポップアップメニューの終了を表し、

「セパレータは、」ポップアップメニューの分割ラインを表し、


次のように各列の内容の背後にあります。


コマンド名 コマンドの実行]をクリックします アイコンインデックス文字列 リソース・ファイル名 コマンドプロンプト文字列 「コマンドID」 タイプID(内部コントロールが現在使用され、一般的に空です)
"新(&N)" Mx_New "IDB_NEW_BITMAP" 「」 「」 「」 「」


コマンド名:


新(&N)。


コマンドをクリックします。


C ++はacedRegCmds-> addCommand登録コマンドを使用しています。

他の言語はDMxDrawX :: RegistUserCustomCommand登録コマンドを使用します。


アイコンインデックスの文字列:


IDB_NEW_BITMAP。


リソースファイル名:


1.、のようなコントロールのバージョン番号除去する必要の名前の空のデフォルトのリソースファイル名を取る:MxDraw.dll書かMxDraw52.dllを、コントロールが状況に応じて、このバージョンに追加されます。

2.リソースファイルのローカルの場合:mytoolbar.bmp取るか、ツールボタンアイコン:当初、地元の表現は、BMPファイルは、次のような、あるローカル:mytoolbar.bmp

     たとえば、次のメニューアイコン、ローカルBMPファイルから:

     "自定义新建(&N)" "Mx_New" "IDB_NEW_BITMAP" "ローカル:mytoolbar.bmp"

3.リソースファイルの場合ウェブ:ツールボタンのアイコンをmytoolbar.bmp取るか::ウェブ:最初は、のような、ネットワーク・サーバ上のBMPファイルを表しmytoolbar.bmpを

      たとえば、次のように同じディレクトリ・サーバーでは、サーバー、BMP、BMPファイルやメニューファイルからファイルをロードするためのメニューアイコン:

      "自定义新建(&N)" "Mx_New" "IDB_NEW_BITMAP" "ウェブ:mytoolbar.bmp"


文字列コマンドプロンプト:


これは、空です。


コマンドID:


ImplementCommandEvent:、あなたはCADの実装でイベントに応じてメニューをクリックし、コントロールのイベントを指令することができます空でない場合は、コマンドイベントID指定された応答は、メニューをクリックしてください。


IDの種類:


CAD内部統制の現在の使用、通常は空。


2、マウスの右応答イベント、ポップアップメニュー


機能の主な用途:


_DMxDrawX :: TrackPopupMenu


指定された位置にポップアップメニュー。詳細は以下のとおりです。


パラメータ 説明

DOUBLEのdX

位置X値ポップアップメニューには、ドキュメントの座標であります

DOUBLE量dY

位置Yの値がポップアップメニューには、ドキュメントの座標であります

sMenuFile

メニュー定義ファイル、サポートネットワークパスは、httpで始まります


        ボイドaxMxDrawX1_MouseEventプライベート(オブジェクト送信者、AxMxDrawXLib._DMxDrawXEvents_MouseEventEvent E)
        { 
            (e.lType == 3)IF 
            { 
                //右ボタン
                文字列SCMD = ""; 
                IF(axMxDrawX1.IsRuningCommand(REF SCMD))
                { 
                    //コマンド実行していない
                    文字列smenu = axMxDrawX1.GetOcxAppPath()+ "\\ mxpoptest.mnuを"; 
                    axMxDrawX1.TrackPopupMenu(e.dX、e.dY、smenu); 
                    // 1を設定し、マウスイベント、もはや受け継が。
                    axMxDrawX1 .SetEventRet(1); 

                } 
                そう 
                {
                    //非命令下运行
                    MxDrawXLib.MxDrawResbufフィルタ=新しいMxDrawXLib.MxDrawResbuf(); 
                    MxDrawXLib.MxDrawEntity ENT =(MxDrawXLib.MxDrawEntity)axMxDrawX1.FindEntAtPoint(e.dX、e.dY、フィルタ)。

                    文字列sPopMenu; 
                    (もし!ENT = NULL)
                    { 
                        axMxDrawX1.ClearCurrentSelect(); 
                        axMxDrawX1.AddCurrentSelect(ent.ObjectID、真、真)。

                        sPopMenu = axMxDrawX1.GetOcxAppPath()+ "\\ MxPopMenuEnt.mnu"。
                    } 
                    { 
                        sPopMenu = axMxDrawX1.GetOcxAppPath()+ "\\ MxPopMenu.mnu"。
                    }


                    axMxDrawX1.TrackPopupMenu(e.dX、e.dY、sPopMenu)は、
                    1セット、マウスイベントは、もはやダウン渡されない//。
                    axMxDrawX1.SetEventRet(1); 
                } 

            } 
        }


次のように3、インシデント応答コマンド、


無効axMxDrawX1_ImplementCommandEventプライベート(オブジェクト送信者、AxMxDrawXLib._DMxDrawXEvents_ImplementCommandEventEvent E)
        { 
            IF(e.iCommandId == 99)
            { 
                MessageBox.Show( "ユーザ定義コマンド..."); 
            } 
            
         }

おすすめ

転載: www.cnblogs.com/yzy0224/p/11095765.html