メニューの「挿入」「ダイレクト・アニメーション」「図形」で左のような
ダイアログが出てきます。
チェックボックスの「境界線」「背景色」はこのオブジェクトの境界線と 背景色です。実際には設定することは少ないと思われますが、慣れないうちは これを出しておくと、位置関係が理解しやすいと思います。
また、オブジェクトの境界は solid, double, noneの他に溝線(groove)、稜線(ridge)、浮き上がり(outset)、沈み込み(inset) などがあります。
図形は「Oval」「Rect」「Polygon」から選択します。
このあとに続く座標は、最初の2つが図形の左上の座標で、オブジェクトの 中心が(0,0)となります。次の2つが幅と高さです。例外はPolygonの時で 最初に頂点の数、次から座標が続きます。
上の図のような設定をすると、ブラウザでは左のように見えます。
オブジェクトの境界が単なる線ではなく、稜線になっていることに注意してください。
タグは、次のようになっています。結局、このようなタグを出力するように
プログラムすればよいです。
<OBJECT ID="target" CLASSID="CLSID:369303c2-d7ac-11d0-89d5-00a0c90833e6" STYLE="position:absolute;width:400;height:300;border:4 double rgb(255,0,0);"> <PARAM NAME="LINE0001" VALUE="SetFillColor(255,255,0)"> <PARAM NAME="LINE0002" VALUE="SetLineColor(0,0,255)"> <PARAM NAME="LINE0003" VALUE="Rect(-50,-50,100,100)"> </OBJECT> |
LINE0003のあとにLINE0004, LINE0005,...と続けて、さらに別な図形を記述することも出来ます。
しかし、ここでは、1つだけ出すようにします。
では、プログラムを見てみましょう。
MYSGC構造体の定義が増えました。// htmledit.h #define IDM_FILE 41001 #define IDM_EDIT 41002 #define IDM_INSERT 41003 #define IDM_BRVIEW 41004 #define IDM_OPTION 41005 typedef struct _tagHData { char szTagNo[4]; char szContents[256]; } MYHTAG, *LPMYHTAG; typedef struct _tagImgData { char szFileName[MAX_PATH]; char szPath[MAX_PATH]; BOOL bPath; } MYIMGTAG, *LPMYIMGTAG; typedef struct _tagTableData { char szRow[8]; char szColumn[8]; char szTitle[64]; char szTitleAlign[16]; char szBorder[8]; BOOL bTitle; BOOL bBorder; } MYTABLETAG, *LPMYTABLETAG; typedef struct _tagFormData { char szMethod[8]; char szAction[64]; char szName[16]; char szID[16]; BOOL bMethod; BOOL bAction; BOOL bName; BOOL bID; } MYFORMTAG, *LPMYFORMTAG; typedef struct _tagInputData { char szType[16]; char szValue[64]; char szName[16]; char szID[16]; char szOnClick[64]; char szOnBlur[64]; char szOnChange[64]; char szOnFocus[64]; char szOnSubmit[64]; BOOL bValue; BOOL bName; BOOL bID; BOOL bClick; BOOL bBlur; BOOL bChange; BOOL bFocus; BOOL bSubmit; } MYINPUTTAG, *LPMYINPUTTAG; typedef struct _tagInitialData { int x; //ウィンドウx座標 int y; //y座標 int wx; //ウィンドウ幅 int wy; //ウィンドウ高さ COLORREF crTipText; COLORREF crTipBackground; } MYINITIALDATA, *LPMYINITIALDATA; typedef struct _tagDirectAniText { char szText[256]; char szObjectName[32]; char szObjectBorderStyle[16]; char szObjectBorderColor[16]; char szBackColor[16]; BOOL bBorder; int nObjectBorderWidth; int nObjectWidth; int nObjectHeight; int nX; int nY; int nRotate; char szLineColor[16]; char szFillColor[16]; int nLineStyle; int nLineWidth; char szFontName[64]; int nFontWidth; int nFontWeight; BOOL bItalic; BOOL bUnderLine; BOOL bStrikeOut; } MYDIRECTTEXT, *LPMYDIRECTTEXT; typedef struct _tagDirectAniPath { char szObjectID[32]; BOOL bAutoStart; BOOL bRepeat; char szRepeatNo[8]; BOOL bBounce; char szDuration[16]; char szShape[16]; char szCoordinate[64]; char szTarget[32]; char szTimerInterval[16]; } MYDIRECTANIPATH, *LPMYDIRECTANIPATH; typedef struct _tagSGC { char szObjectID[32]; char szWidth[8]; char szHeight[8]; char szBorder[4]; char szLineStyle[16]; char szLineColor[16]; char szBackGroundColor[16]; BOOL bBorder; BOOL bBackGround; char szShape[16]; char szShapeLineColor[16]; char szShapeFillColor[16]; char szCoordinate[64]; } MYSGC, *LPMYSGC;
MYSCGダイアログボックスが増えました。// htmledit18.rcの一部 ///////////////////////////////////////////////////////////////////////////// // // Accelerator // MYACCEL ACCELERATORS DISCARDABLE BEGIN "A", IDM_ALL, VIRTKEY, CONTROL, NOINVERT "B", IDM_BASICINPUT, VIRTKEY, SHIFT, CONTROL, NOINVERT "D", IDM_DELETE, VIRTKEY, CONTROL, NOINVERT "N", IDM_NEW, VIRTKEY, CONTROL, NOINVERT "O", IDM_OPEN, VIRTKEY, CONTROL, NOINVERT "S", IDM_SAVE, VIRTKEY, CONTROL, NOINVERT "V", IDM_PASTE, VIRTKEY, CONTROL, NOINVERT VK_F12, IDM_BROWSER, VIRTKEY, NOINVERT END ///////////////////////////////////////////////////////////////////////////// // // GIF // BACK GIF DISCARDABLE "back.gif" HOME GIF DISCARDABLE "home.gif" MAIL GIF DISCARDABLE "mail.gif" WHAT GIF DISCARDABLE "what.gif" INDEX GIF DISCARDABLE "index.gif" CONTENTS GIF DISCARDABLE "contents.gif" ///////////////////////////////////////////////////////////////////////////// // // Dialog // MYBASICINPUT DIALOG DISCARDABLE 0, 0, 187, 121 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "基本項目入力" FONT 9, "MS Pゴシック" BEGIN EDITTEXT IDC_EDIT1,39,7,141,14,ES_AUTOHSCROLL EDITTEXT IDC_EDIT2,39,27,141,14,ES_AUTOHSCROLL EDITTEXT IDC_EDIT3,39,47,141,14,ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,39,100,50,14 PUSHBUTTON "キャンセル",IDCANCEL,96,100,50,14 LTEXT "タイトル",IDC_STATIC,7,7,23,8 LTEXT "作者",IDC_STATIC,7,30,15,8 LTEXT "E-Mail",IDC_STATIC,7,47,20,8 CONTROL "色",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,35,76,23,10 CONTROL "壁紙",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,67,76,32, 10 GROUPBOX "背景",IDC_STATIC,26,67,133,26 CONTROL "指定しない",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,108, 76,46,10 END MYDIRECTTEXT DIALOG DISCARDABLE 0, 0, 179, 341 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ダイレクト・アニメーション[テキスト回転]" FONT 9, "MS Pゴシック" BEGIN DEFPUSHBUTTON "OK",IDOK,7,320,50,14 PUSHBUTTON "キャンセル",IDCANCEL,122,320,50,14 LTEXT "テキスト",IDC_STATIC,7,7,29,11 EDITTEXT IDC_TEXT,36,7,131,15,ES_AUTOHSCROLL LTEXT "ラインカラー",IDC_STATIC,7,49,42,11 EDITTEXT IDC_LINECOLOR,57,46,57,14,ES_AUTOHSCROLL LTEXT "塗りつぶし色",IDC_STATIC,7,66,45,11 EDITTEXT IDC_LINEWIDTH,57,100,55,15,ES_AUTOHSCROLL LTEXT "ラインスタイル",IDC_STATIC,7,83,46,14 LTEXT "ライン幅",IDC_STATIC,7,101,32,12 LTEXT "フォント名",IDC_STATIC,7,125,35,12 EDITTEXT IDC_FONTNAME,57,119,82,15,ES_AUTOHSCROLL LTEXT "フォント高さ",IDC_STATIC,7,145,35,12 EDITTEXT IDC_FONTHEIGHT,57,141,31,15,ES_AUTOHSCROLL LTEXT "太さ",IDC_STATIC,98,141,23,13 EDITTEXT IDC_FONTWEIGHT,124,139,43,15,ES_AUTOHSCROLL CONTROL "イタリック",IDC_ITALIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,161,47,14 CONTROL "アンダーライン",IDC_UNDERLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,64,160,59,15 CONTROL "取消線",IDC_STRIKEOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,129,160,33,15 LTEXT "位置(",IDC_STATIC,24,29,19,11 EDITTEXT IDC_X,47,27,23,15,ES_AUTOHSCROLL LTEXT ",",IDC_STATIC,73,27,8,12 EDITTEXT IDC_Y,83,27,23,15,ES_AUTOHSCROLL LTEXT ")",IDC_STATIC,108,27,8,11 LTEXT "回転",IDC_STATIC,117,27,17,11 EDITTEXT IDC_ROTATE,137,26,28,15,ES_AUTOHSCROLL EDITTEXT IDC_FILLCOLOR,57,62,57,14,ES_AUTOHSCROLL COMBOBOX IDC_LINESTYLE,57,81,54,54,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "参照",IDC_LINECOLORBTN,120,44,26,16 PUSHBUTTON "参照",IDC_FILLCOLORBTN,120,60,26,16 PUSHBUTTON "参照",IDC_FONTBTN,146,119,26,16 LTEXT "オブジェクト名",IDC_STATIC,15,192,48,11 EDITTEXT IDC_OBJECTNAME,65,190,68,15,ES_AUTOHSCROLL LTEXT "幅",IDC_STATIC,15,211,11,8 EDITTEXT IDC_OBJECTWIDTH,29,207,40,14,ES_AUTOHSCROLL LTEXT "高さ",IDC_STATIC,74,212,20,8 EDITTEXT IDC_OBJECTHEIGHT,95,209,40,14,ES_AUTOHSCROLL LTEXT "境界スタイル",IDC_STATIC,18,247,44,11 COMBOBOX IDC_BORDERSTYLE,62,243,44,62,CBS_DROPDOWN | CBS_SORT | WS_DISABLED | WS_VSCROLL | WS_TABSTOP LTEXT "境界色",IDC_STATIC,17,264,29,11 EDITTEXT IDC_BORDERCOLOR,62,261,57,14,ES_AUTOHSCROLL | WS_DISABLED PUSHBUTTON "参照",IDC_BORDERCOLORBTN,125,261,26,14,WS_DISABLED LTEXT "境界幅",IDC_STATIC,17,279,35,12 EDITTEXT IDC_BORDERWIDTH,62,279,29,13,ES_AUTOHSCROLL | WS_DISABLED GROUPBOX "オブジェクト",IDC_STATIC,7,181,155,135 LTEXT "背景色",IDC_STATIC,17,297,26,10 EDITTEXT IDC_BACKCOLOR,62,297,57,14,ES_AUTOHSCROLL | WS_DISABLED PUSHBUTTON "参照",IDC_BACKCOLORBTN,125,297,26,14,WS_DISABLED CONTROL "境界を付ける",IDC_ISBORDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,227,54,14 END MYFORMTAG DIALOG DISCARDABLE 0, 0, 187, 103 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "フォームの挿入" FONT 9, "MS Pゴシック" BEGIN DEFPUSHBUTTON "OK",IDOK,38,82,50,14 PUSHBUTTON "キャンセル",IDCANCEL,97,82,50,14 CONTROL "METHOD",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,47,12 COMBOBOX IDC_COMBO1,65,7,52,41,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP CONTROL "ACTION",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,25,43,12 EDITTEXT IDC_EDIT1,65,25,114,12,ES_AUTOHSCROLL CONTROL "NAME",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 7,43,34,12 EDITTEXT IDC_EDIT2,65,43,114,12,ES_AUTOHSCROLL CONTROL "ID",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7, 61,32,12 EDITTEXT IDC_EDIT3,65,61,114,12,ES_AUTOHSCROLL END MYHTAG DIALOG DISCARDABLE 0, 0, 187, 93 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "見出しタグの挿入" FONT 9, "MS Pゴシック" BEGIN COMBOBOX IDC_COMBO1,51,7,18,68,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP EDITTEXT IDC_EDIT1,51,27,129,32,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN DEFPUSHBUTTON "OK",IDOK,40,72,50,14 PUSHBUTTON "キャンセル",IDCANCEL,95,72,50,14 LTEXT "大きさ",IDC_STATIC,7,7,32,11 LTEXT "コンテンツ",IDC_STATIC,7,27,39,10 END MYIMGTAG DIALOG DISCARDABLE 0, 0, 187, 91 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "イメージの挿入" FONT 9, "MS Pゴシック" BEGIN DEFPUSHBUTTON "OK",IDOK,43,70,41,14 PUSHBUTTON "キャンセル",IDCANCEL,101,70,41,14 CONTROL "パス付き",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,42,15 EDITTEXT IDC_EDIT1,50,7,107,16,ES_AUTOHSCROLL LTEXT "ファイル名",IDC_STATIC,7,33,38,11 EDITTEXT IDC_EDIT2,50,29,107,16,ES_AUTOHSCROLL PUSHBUTTON "参照",IDC_BUTTON1,160,31,20,15 CONTROL "画像を確認する",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,52,61,15 END MYINPUTTAG DIALOG DISCARDABLE 0, 0, 135, 203 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "INPUTの挿入" FONT 9, "MS Pゴシック" BEGIN DEFPUSHBUTTON "OK",IDOK,17,182,50,14 PUSHBUTTON "キャンセル",IDCANCEL,71,182,50,14 LTEXT "TYPE",IDC_STATIC,7,7,24,9 COMBOBOX IDC_COMBO1,49,7,45,92,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP CONTROL "NAME",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 7,48,35,14 CONTROL "ID",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7, 67,25,14 CONTROL "onClick",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,86,35,14 EDITTEXT IDC_EDIT4,49,87,75,13,ES_AUTOHSCROLL EDITTEXT IDC_EDIT2,49,49,75,13,ES_AUTOHSCROLL EDITTEXT IDC_EDIT3,49,67,75,13,ES_AUTOHSCROLL EDITTEXT IDC_EDIT1,49,29,75,13,ES_AUTOHSCROLL CONTROL "VALUE",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 7,29,37,14 CONTROL "onBlur",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,105,36,14 EDITTEXT IDC_EDIT5,49,105,75,13,ES_AUTOHSCROLL CONTROL "onChange",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,124,40,14 EDITTEXT IDC_EDIT6,49,125,75,13,ES_AUTOHSCROLL CONTROL "onFocus",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,143,37,14 EDITTEXT IDC_EDIT7,49,143,75,13,ES_AUTOHSCROLL CONTROL "onSubmit",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,162,40,14 EDITTEXT IDC_EDIT8,49,163,75,13,ES_AUTOHSCROLL END MYTABLETAG DIALOG DISCARDABLE 0, 0, 95, 133 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "テーブルの挿入" FONT 9, "MS Pゴシック" BEGIN DEFPUSHBUTTON "OK",IDOK,7,112,33,14 PUSHBUTTON "キャンセル",IDCANCEL,46,112,33,14 LTEXT "行",IDC_STATIC,7,7,11,10 COMBOBOX IDC_COMBO1,29,7,23,58,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP LTEXT "列",IDC_STATIC,7,27,11,10 COMBOBOX IDC_COMBO2,29,25,23,55,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP CONTROL "BORDER",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,49,41,12 EDITTEXT IDC_EDIT1,51,48,34,14,ES_AUTOHSCROLL CONTROL "CAPTION",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,67,44,12 COMBOBOX IDC_COMBO3,51,67,34,45,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP EDITTEXT IDC_EDIT2,17,89,71,14,ES_AUTOHSCROLL END MYDIRECTPATH DIALOG DISCARDABLE 0, 0, 155, 271 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ダイレクト・アニメーション[パス移動]" FONT 9, "MS Pゴシック" BEGIN CONTROL "オートスタート",IDC_AUTOSTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,58,14 CONTROL "バウンド",IDC_BOUNCE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,7,39,14 CONTROL "リピート",IDC_REPEAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,40,41,14 EDITTEXT IDC_REPEATEDIT,75,35,69,20,ES_AUTOHSCROLL LTEXT "このオブジェクトのID",IDC_STATIC,7,69,64,12 EDITTEXT IDC_OBJECTID,75,63,69,20,ES_AUTOHSCROLL LTEXT "終点までの時間",IDC_STATIC,7,98,54,14 EDITTEXT IDC_DURATION,75,92,69,20,ES_AUTOHSCROLL LTEXT "ターゲット",IDC_STATIC,7,127,36,14 EDITTEXT IDC_TARGET,75,120,69,20,ES_AUTOHSCROLL LTEXT "形状",IDC_STATIC,7,151,60,14 COMBOBOX IDC_SHAPE,76,147,68,59,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP LTEXT "座標 (多角形の場合は最初に頂点の数)",IDC_STATIC,7,179, 65,23 EDITTEXT IDC_COORDINATE,75,171,69,35,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN LTEXT "インターバル",IDC_STATIC,7,217,45,14 EDITTEXT IDC_INTERVAL,75,213,69,20,ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,24,250,50,14 PUSHBUTTON "キャンセル",IDCANCEL,93,250,50,14 END MYSGC DIALOG DISCARDABLE 0, 0, 163, 257 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Structured Graphic Control" FONT 9, "MS Pゴシック" BEGIN DEFPUSHBUTTON "OK",IDOK,7,236,50,14 PUSHBUTTON "キャンセル",IDCANCEL,105,236,50,14 LTEXT "ObjectID",IDC_STATIC,7,7,32,10 EDITTEXT IDC_EDITOBJECTID,41,7,60,12,ES_AUTOHSCROLL LTEXT "幅",IDC_STATIC,29,27,12,10 EDITTEXT IDC_EDITWIDTH,50,25,40,12,ES_AUTOHSCROLL LTEXT "高さ",IDC_STATIC,93,27,16,10 EDITTEXT IDC_EDITHEIGHT,115,25,40,12,ES_AUTOHSCROLL LTEXT "境界線幅",IDC_STATIC,19,64,35,10 EDITTEXT IDC_EDITBORDER,71,60,40,12,ES_AUTOHSCROLL COMBOBOX IDC_COMBOLINESTYLE,71,78,48,57,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP LTEXT "境界線スタイル",IDC_STATIC,19,83,49,10 LTEXT "境界線の色",IDC_STATIC,19,100,47,10 EDITTEXT IDC_EDITLINECOLOR,71,97,40,12,ES_AUTOHSCROLL EDITTEXT IDC_EDITBACKGROUNDCOLOR,47,127,40,12,ES_AUTOHSCROLL PUSHBUTTON "参照",IDC_BUTTONLINECOLOR,119,96,29,14 PUSHBUTTON "参照",IDC_BUTTONBACKGROUNDCOLOR,119,127,29,14 GROUPBOX "",IDC_STATIC,7,51,145,69 CONTROL "境界線",IDC_CHECKBORDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,40,37,10 CONTROL "背景色",IDC_CHECKBACKCOLOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,127,37,10 LTEXT "図形",IDC_STATIC,7,157,24,11 COMBOBOX IDC_COMBOSHAPE,41,155,77,75,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP LTEXT "座標",IDC_STATIC,7,179,25,11 EDITTEXT IDC_EDITSHAPECOORD,43,175,112,12,ES_AUTOHSCROLL LTEXT "図形境界色",IDC_STATIC,7,201,49,10 EDITTEXT IDC_EDITSHAPEBORDERCOLOR,71,201,40,12,ES_AUTOHSCROLL PUSHBUTTON "参照",IDC_BUTTONSHAPEBORDERCOLOR,119,201,29,14 LTEXT "塗りつぶし色",IDC_STATIC,7,215,41,12 EDITTEXT IDC_EDITSHAPEFILLCOLOR,71,215,40,12,ES_AUTOHSCROLL PUSHBUTTON "参照",IDC_BUTTONSHAPEFILLCOLOR,119,219,29,14 END ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. MYICON ICON DISCARDABLE "htmledit.ico" ///////////////////////////////////////////////////////////////////////////// // // Menu // EDIT MENU DISCARDABLE BEGIN POPUP "ダミーです" BEGIN MENUITEM "コピー", IDM_COPY MENUITEM "切り取り", IDM_CUT MENUITEM "貼り付け", IDM_PASTE MENUITEM "削除", IDM_DELETE MENUITEM "元に戻す", IDM_UNDO END END FILE MENU DISCARDABLE BEGIN POPUP "ダミーです" BEGIN MENUITEM "新規作成", IDM_NEW MENUITEM "開く", IDM_OPEN MENUITEM "上書き保存", IDM_SAVE END END INSERT MENU DISCARDABLE BEGIN POPUP "ダミーです" BEGIN MENUITEM "<P>", IDM_P MENUITEM "<BR>", IDM_BR MENUITEM "<H*></H*>...", IDM_H MENUITEM "<IMG>...", IDM_IMAGE MENUITEM "<A HREF></A>...", IDM_A MENUITEM "<TABLE></TABLE>...", IDM_TABLE MENUITEM "<FORM></FORM>...", IDM_FORM MENUITEM "<INPUT>...", IDM_INPUT END END INSERT2 MENU DISCARDABLE BEGIN POPUP "ダミーです" BEGIN MENUITEM "基本項目入力", IDM_BASICINPUT MENUITEM "JavaScriptの挿入", IDM_SCRIPT POPUP "タグの挿入" BEGIN MENUITEM "<P>", IDM_P MENUITEM "<BR>", IDM_BR MENUITEM "<H*></H*>...", IDM_H MENUITEM "<IMG>...", IDM_IMAGE MENUITEM "<A HREF></A>...", IDM_A MENUITEM "<TABLE></TABLE>...", IDM_TABLE MENUITEM "<FORM></FORM>...", IDM_FORM MENUITEM "<INPUT>...", IDM_INPUT END POPUP "GIF画像" BEGIN MENUITEM "What's New", IDM_WHAT MENUITEM "Mail", IDM_MAILTO MENUITEM "Home", IDM_HOME MENUITEM "Index", IDM_INDEX MENUITEM "Back", IDM_BACK MENUITEM "Contents", IDM_CONTENTS END MENUITEM SEPARATOR POPUP "ダイレクト・アニメーション" BEGIN MENUITEM "図形", IDM_SGC MENUITEM "テキスト", IDM_DIRECTANI_TEXT MENUITEM SEPARATOR MENUITEM "パスコントロール", IDM_DIRECTANI_PATH END END END MYMENU MENU DISCARDABLE BEGIN POPUP "ファイル(&F)" BEGIN MENUITEM "新規作成(&N)...\tCtrl+N", IDM_NEW MENUITEM "開く(&O)...\tCtrl+O", IDM_OPEN MENUITEM SEPARATOR MENUITEM "上書き保存(&S)\tCtrl+S", IDM_SAVE MENUITEM "名前を付けて保存(&A)...", IDM_SAVEAS MENUITEM SEPARATOR MENUITEM "アプリケーションの終了(&X)", IDM_END END POPUP "編集(&E)" BEGIN MENUITEM "元に戻す(&U)\tCtrl+Z", IDM_UNDO MENUITEM "切り取り(&T)\tCtrl+X", IDM_CUT MENUITEM "コピー(&C)\tCtrl+C", IDM_COPY MENUITEM "貼り付け(&P)\tCtrl+V", IDM_PASTE MENUITEM "削除(&D)\tCtrl+D", IDM_DELETE MENUITEM SEPARATOR MENUITEM "すべて選択(&L)\tCtrl+A", IDM_ALL END POPUP "挿入(&I)" BEGIN MENUITEM "基本項目入力(&B)...\tShift+Ctrl+B", IDM_BASICINPUT MENUITEM SEPARATOR POPUP "タグの挿入" BEGIN MENUITEM "<P>", IDM_P MENUITEM "<BR>", IDM_BR MENUITEM "<H*></H*>...", IDM_H MENUITEM "<IMG>...", IDM_IMAGE MENUITEM "<A HREF></A>...", IDM_A MENUITEM "<TABLE></TABLE>...", IDM_TABLE MENUITEM "<FORM></FORM>...", IDM_FORM MENUITEM "<INPUT>...", IDM_INPUT END POPUP "JavaScriptの挿入" BEGIN MENUITEM "<SCRIPT>", IDM_SCRIPT END POPUP "GIF画像" BEGIN MENUITEM "What's New", IDM_WHAT MENUITEM "Mail", IDM_MAILTO MENUITEM "Home", IDM_HOME MENUITEM "Index", IDM_INDEX MENUITEM "Back", IDM_BACK MENUITEM "Contents", IDM_CONTENTS END MENUITEM SEPARATOR POPUP "ダイレクト・アニメーション" BEGIN MENUITEM "図形", IDM_SGC MENUITEM "テキスト", IDM_DIRECTANI_TEXT MENUITEM SEPARATOR MENUITEM "パスコントロール", IDM_DIRECTANI_PATH END END POPUP "ブラウザ(&B)" BEGIN MENUITEM "ブラウザ起動(&E)\tF12", IDM_BROWSER END POPUP "オプション(&O)" BEGIN POPUP "ツールチップ(&T)" BEGIN MENUITEM "文字色(&L)", IDM_TIPTXTCOLOR MENUITEM "背景色(&B)", IDM_TIPBKCOLOR END END END MYMENU2 MENU DISCARDABLE BEGIN POPUP "ダミーです" BEGIN POPUP "ファイル(&F)" BEGIN MENUITEM "新規作成(&N)...\tCtrl+N", IDM_NEW MENUITEM "開く(&O)...\tCtrl+O", IDM_OPEN MENUITEM SEPARATOR MENUITEM "上書き保存(&S)\tCtrl+S", IDM_SAVE MENUITEM "名前を付けて保存(&A)...", IDM_SAVEAS MENUITEM SEPARATOR MENUITEM "アプリケーションの終了(&X)", IDM_END END POPUP "編集" BEGIN MENUITEM "元に戻す(&U)\tCtrl+Z", IDM_UNDO MENUITEM "切り取り(&T)\tCtrl+X", IDM_CUT MENUITEM "コピー(&C)\tCtrl+C", IDM_DIRECTANI_TEXT2 MENUITEM "貼り付け(&]P)\tCtrl+V", IDM_PASTE MENUITEM "削除(&D)\tCtrl+D", IDM_DELETE MENUITEM SEPARATOR MENUITEM "すべて選択(&L)\tCtrl+A", IDM_ALL END POPUP "挿入(&I)" BEGIN MENUITEM "基本項目(&B)\tShift+Ctrl+B", IDM_BASICINPUT MENUITEM SEPARATOR POPUP "タグの挿入" BEGIN MENUITEM "<P>", IDM_P MENUITEM "<BR>", IDM_BR MENUITEM "<H*></H*>...", IDM_H MENUITEM "<IMG>...", IDM_IMAGE MENUITEM "<A HREF></A>...", IDM_A MENUITEM "<TABLE></TABLE>...", IDM_TABLE MENUITEM "<FORM></FORM>...", IDM_FORM MENUITEM "<INPUT>...", IDM_INPUT END POPUP "JavaScriptの挿入" BEGIN MENUITEM "<SCRIPT>", IDM_SCRIPT END POPUP "GIF画像" BEGIN MENUITEM "What's New", IDM_WHAT MENUITEM "Mail", IDM_MAILTO MENUITEM "Home", IDM_HOME MENUITEM "Index", IDM_INDEX MENUITEM "Back", IDM_BACK MENUITEM "Contents", IDM_CONTENTS END MENUITEM SEPARATOR POPUP "ダイレクト・アニメーション" BEGIN MENUITEM "図形", IDM_SGC MENUITEM "テキスト", IDM_DIRECTANI_TEXT MENUITEM SEPARATOR MENUITEM "パスコントロール", IDM_DIRECTANI_PATH END END POPUP "ブラウザ(&B)" BEGIN MENUITEM "ブラウザの起動(&B)\tF12", IDM_BROWSER END POPUP "オプション(&O)" BEGIN POPUP "ツールチップ(&T)" BEGIN MENUITEM "文字色(&L)", IDM_TIPTXTCOLOR MENUITEM "背景色(&B)", IDM_TIPBKCOLOR END END END END ///////////////////////////////////////////////////////////////////////////// // // Toolbar // IDR_TOOLBAR3 TOOLBAR DISCARDABLE 16, 15 BEGIN BUTTON ID_BUTTON40041 BUTTON ID_BUTTON40042 BUTTON ID_BUTTON40043 END IDR_TOOLBAR3X TOOLBAR DISCARDABLE 16, 15 BEGIN BUTTON ID_BUTTON40035 BUTTON ID_BUTTON40036 BUTTON ID_BUTTON40037 END ///////////////////////////////////////////////////////////////////////////// // // Bitmap // IDR_TOOLBAR3 BITMAP DISCARDABLE "toolbar3.bmp" IDR_TOOLBAR3X BITMAP DISCARDABLE "toolbar3x.bmp" ///////////////////////////////////////////////////////////////////////////// // // String Table // STRINGTABLE DISCARDABLE BEGIN IDS_FILE "ファイル(&F)" IDS_EDIT "編集(&E)" IDS_INSERT "挿入(&I)" IDS_BROWSER "ブラウザ(&B)" IDS_OPTION "オプション(&O)" END
また、メニューに「図形」が増えました。メニュー項目が1つ増えると 3か所リソースを変更しなくてはいけない点に注意してください。
MySgcProcプロシージャとMyInsertSGC関数のプロトタイプ宣言が増えました。// htmedit18.cpp #ifndef STRICT #define STRICT #endif #define ID_EDIT 100 #define ID_EDIT2 101 #define ID_TOOL1 102 #define ID_TOOL2 103 #define ID_TOOL3 104 #define ID_REBAR 105 #define ID_STATIC 106 #define ID_STATUS 107 #define ID_TOOLMENU 108 #define ID_TIP1 111 #define ID_TIP2 112 #define ID_TIP3 113 #define MY_BUF_SIZE 1024 * 64 - 1 #define MY_MSG WM_USER #include <windows.h> #include <windowsx.h> #include "htmledit.h" #include "resource.h" #include <commctrl.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MyBasicInputProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MyHProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MyImgProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MyAProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MyTableProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MyFormProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MyInputProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK NewEditProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK KbdHook(int, WPARAM, LPARAM lParam); LRESULT CALLBACK MyDirectTextProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MyDirectPathProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK MySgcProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); BOOL MySetHTML(HWND, HWND); int MyBasicInput(HWND); BOOL MySaveAs(HWND); BOOL MySave(HWND); BOOL MyInsertTag(HWND, HWND, char *); BOOL MyInsertH(HWND, HWND); BOOL MyInsertIMG(HWND, HWND); BOOL MyGetFileTitle(HWND, HWND, BOOL); BOOL MyGetBodyColor(HWND); BOOL MyGetWallPaper(HWND); BOOL MyInsertA(HWND, HWND); BOOL MyGetHREFFile(HWND, HWND, BOOL); BOOL MyInsertTable(HWND, HWND); BOOL MyInsertForm(HWND, HWND); BOOL MyInsertInput(HWND, HWND); BOOL MyInsertScript(HWND, HWND); HWND MakeMyToolbar(HWND, int, TBBUTTON *, int); HWND MakeMyToolbar2(HWND, int, TBBUTTON *, int, int, int); HWND MakeMyToolbarMenu(HWND); BOOL MyOpen(HWND, HWND); BOOL CheckMyMenu(HMENU, HWND, HWND); BOOL CanPaste(HWND); BOOL MySetStatusText(HWND, int, char *); HWND MakeMyToolTip(HWND, HWND, int, int, TBBUTTON *, char [][256]); void SetTipColor(HWND, HWND *, COLORREF *, int); void SetTipBkColor(HWND, HWND *, COLORREF *, int); BOOL GetInitialSetting(LPMYINITIALDATA); BOOL SetInitialSetting(LPMYINITIALDATA); BOOL ShowMyPopMenu(HWND, HWND, char *, int, HWND, HWND); BOOL MyCreateFileFromResource(HWND, HWND, char *, char *, char *); BOOL MyDirectAniText(HWND, HWND); BOOL MyDirectColor(HWND, HWND); COLORREF MyGetColor(HWND); BOOL MyDirectFont(HWND, HWND, HWND, HWND, HWND, HWND, HWND, HWND, LPMYDIRECTTEXT); BOOL MyDirectAniPath(HWND, HWND); BOOL MyInsertSGC(HWND, HWND); char szClassName[] = "htmedit18"; //ウィンドウクラス char szExeName[] = "htmledit18.exe"; //このプログラムの名前 char *lpszWinTitleOrg = "猫でもわかるHTMLエディタ[%s]"; char *lpszHead = "<HTML>\r\n<HEAD>\r\n" "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">\r\n<TITLE>"; char szTitle[64] = "タイトル"; char *lpszBody1 = "</TITLE>\r\n</HEAD>\r\n<BODY"; char szBody2[256]; char *lpszBody3 =">\r\n"; char *lpszAddress = "<ADDRESS>"; char *lpszMailto = "<A HREF=\"mailto:"; char szEMail[256] = "webmaster@kumei.ne.jp"; char *lpszMailEnd = "\">"; char szAuthor[64] = "Yasutaka Kumei"; char *lpszCloseA = "</A>"; char *lpszEnd = "</ADDRESS>\r\n</BODY>\r\n</HTML>"; char szFileName[MAX_PATH]; char szFileTitle[64]; WNDPROC OrgEditProc; HIMAGELIST hImage; HWND hParent; HHOOK hHook; HWND hMytoolMenu; HWND hTool2_g, hEdit_g; HINSTANCE hInst; TBBUTTON tbButton1[] = { {STD_FILENEW, IDM_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {STD_FILEOPEN, IDM_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {STD_FILESAVE, IDM_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, }; TBBUTTON tbButton2[] = { {STD_COPY, IDM_COPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {STD_CUT, IDM_CUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {STD_PASTE, IDM_PASTE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {STD_DELETE, IDM_DELETE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {STD_UNDO, IDM_UNDO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, }; TBBUTTON tbButton3[] = { {0, IDM_BASICINPUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {1, IDM_SCRIPT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0}, {2, IDM_TAG, TBSTATE_ENABLED, TBSTYLE_DROPDOWN, 0, 0, 0}, }; TBBUTTON tbButtonMenu[] = { {I_IMAGENONE, IDM_FILE, TBSTATE_ENABLED, TBSTYLE_BUTTON | BTNS_AUTOSIZE, 0, 0, 0}, {I_IMAGENONE, IDM_EDIT, TBSTATE_ENABLED, TBSTYLE_BUTTON | BTNS_AUTOSIZE, 0, 0, 0}, {I_IMAGENONE, IDM_INSERT, TBSTATE_ENABLED, TBSTYLE_BUTTON | BTNS_AUTOSIZE, 0, 0, 0}, {I_IMAGENONE, IDM_BRVIEW, TBSTATE_ENABLED, TBSTYLE_BUTTON | BTNS_AUTOSIZE, 0, 0, 0}, {I_IMAGENONE, IDM_OPTION, TBSTATE_ENABLED, TBSTYLE_BUTTON | BTNS_AUTOSIZE, 0, 0, 0} }; char szTipText1[][256] = { "新規にHTMLファイルを作成します", "HTMLファイルを開きます", "上書き保存をします\nすでに名前を付けて保存してある必要があります" }; char szTipText2[][256] = { "選択された文字列をコピーします", "選択された文字列を切り取って\nクリップボードに格納します", "クリップボードから貼り付けます", "選択された文字列を削除します\n削除してしまってもUNDOで取り消すこともできます", "元に戻します" }; char szTipText3[][256] = { "HTMLの基本的枠組みを作ります", "スクリプトを挿入します", "タグを挿入します" };
WinMain, InitApp, InitInstanceの各関数に変更はありません。
メインウィンドウのプロシージャです。//ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { ...省略 switch (msg) { ...省略 case WM_MENUSELECT: ...省略 case IDM_WHAT: MySetStatusText(hStatus, 0, "What's New のGIF画像を挿入します"); break; case IDM_MAILTO: MySetStatusText(hStatus, 0, "Mail のGIF画像を挿入します"); break; case IDM_HOME: MySetStatusText(hStatus, 0, "Home のGIF画像を挿入します"); break; case IDM_INDEX: MySetStatusText(hStatus, 0, "Index のGIF画像を挿入します"); break; case IDM_BACK: MySetStatusText(hStatus, 0, "Back のGIF画像を挿入します"); break; case IDM_CONTENTS: MySetStatusText(hStatus, 0, "Contents のGIF画像を挿入します"); break; case IDM_SGC: MySetStatusText(hStatus, 0, "ダイレクト・アニメーション(図形)を挿入します"); break; case IDM_DIRECTANI_TEXT: MySetStatusText(hStatus, 0, "ダイレクト・アニメーション(文字)を挿入します"); break; case IDM_DIRECTANI_PATH: MySetStatusText(hStatus, 0, "ダイレクト・アニメーション(パスコントロール)を挿入します"); break; default: MySetStatusText(hStatus, 0, ""); break; } break; ...省略 case WM_COMMAND: switch (LOWORD(wp)) { ...省略 case IDM_SGC: MyInsertSGC(hEdit, hEdit_hide); break; } ...省略
メニュー項目をポイントしたとき、ステータスバーに説明が表示されない 項目があったので追加しました。
また、メニュー項目からIDM_SGCが選択されたときの処理を追加しました。
あとは、ずーっと変更はありません。
ダイアログボックスを呼び出してOKボタンが押されたら、所定の文字列を作ります。 これも、今までと同じパターンで、ダイアログボックスのプロシージャにMYSGC構造体の アドレスを渡して、これに書き込んでもらいます。BOOL MyInsertSGC(HWND hEdit, HWND hEdit_hide) { MYSGC mysgc; char szBuf[1024]; if (DialogBoxParam(hInst, "MYSGC", hEdit, (DLGPROC)MySgcProc, (LPARAM)&mysgc) == IDCANCEL) return FALSE; strcpy(szBuf, "<OBJECT ID=\""); strcat(szBuf, mysgc.szObjectID); strcat(szBuf, "\" CLASSID=\"CLSID:369303c2-d7ac-11d0-89d5-00a0c90833e6\"\r\n"); strcat(szBuf, "STYLE=\"position:absolute;width:"); strcat(szBuf, mysgc.szWidth); strcat(szBuf, ";height:"); strcat(szBuf, mysgc.szHeight); strcat(szBuf, ";"); if (mysgc.bBorder) { strcat(szBuf,"border:"); strcat(szBuf, mysgc.szBorder); strcat(szBuf, " "); strcat(szBuf, mysgc.szLineStyle); strcat(szBuf, " rgb("); strcat(szBuf, mysgc.szLineColor); strcat(szBuf, ");"); } if (mysgc.bBackGround) { strcat(szBuf, "background:"); strcat(szBuf, "rgb("); strcat(szBuf, mysgc.szBackGroundColor); strcat(szBuf, ");"); } strcat(szBuf, "\">\r\n"); strcat(szBuf, "<PARAM NAME=\"LINE0001\" VALUE=\"SetFillColor("); strcat(szBuf, mysgc.szShapeFillColor); strcat(szBuf, ")\">\r\n"); strcat(szBuf, "<PARAM NAME=\"LINE0002\" VALUE=\"SetLineColor("); strcat(szBuf, mysgc.szShapeLineColor); strcat(szBuf, ")\">\r\n<PARAM NAME=\"LINE0003\" VALUE=\""); strcat(szBuf, mysgc.szShape); strcat(szBuf, "("); strcat(szBuf, mysgc.szCoordinate); strcat(szBuf, ")\">\r\n</OBJECT>\r\n"); MyInsertTag(hEdit, hEdit_hide, szBuf); return TRUE; }
ダイアログボックスのプロシージャです。LRESULT CALLBACK MySgcProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { static LPMYSGC lpMysgc; static HWND hObjectID, hWidth, hHeight, hChkBorder, hBorder, hComboLineStyle, hBorderColor, hChkBackGround, hBackGround, hBtnLineColor, hBtnBackGroundColor, hComboShape, hShapeBorderColor, hShapeFillColor, hShapeCoordinate; char szBuf[16]; COLORREF cr_ln, cr_bg, cr_shapeline, cr_shapefill; switch (msg) { case WM_INITDIALOG: lpMysgc = (LPMYSGC)lp; hObjectID = GetDlgItem(hDlg, IDC_EDITOBJECTID); hWidth = GetDlgItem(hDlg, IDC_EDITWIDTH); hHeight = GetDlgItem(hDlg, IDC_EDITHEIGHT); hChkBorder = GetDlgItem(hDlg, IDC_CHECKBORDER); hBorder = GetDlgItem(hDlg, IDC_EDITBORDER); hComboLineStyle = GetDlgItem(hDlg, IDC_COMBOLINESTYLE); hBorderColor = GetDlgItem(hDlg, IDC_EDITLINECOLOR); hChkBackGround = GetDlgItem(hDlg, IDC_CHECKBACKCOLOR); hBackGround = GetDlgItem(hDlg, IDC_EDITBACKGROUNDCOLOR); hBtnLineColor = GetDlgItem(hDlg, IDC_BUTTONLINECOLOR); hBtnBackGroundColor = GetDlgItem(hDlg, IDC_BUTTONBACKGROUNDCOLOR); hComboShape = GetDlgItem(hDlg, IDC_COMBOSHAPE); hShapeBorderColor = GetDlgItem(hDlg, IDC_EDITSHAPEBORDERCOLOR); hShapeFillColor = GetDlgItem(hDlg, IDC_EDITSHAPEFILLCOLOR); hShapeCoordinate = GetDlgItem(hDlg, IDC_EDITSHAPECOORD); ComboBox_InsertString(hComboLineStyle, 0, "浮き上がり"); ComboBox_InsertString(hComboLineStyle, 0, "沈み込み"); ComboBox_InsertString(hComboLineStyle, 0, "溝線"); ComboBox_InsertString(hComboLineStyle, 0, "稜線"); ComboBox_InsertString(hComboLineStyle, 0, "二重線"); ComboBox_InsertString(hComboLineStyle, 0, "実線"); ComboBox_InsertString(hComboLineStyle, 0, "無し"); ComboBox_InsertString(hComboShape, 0, "Rect"); ComboBox_InsertString(hComboShape, 0, "Oval"); ComboBox_InsertString(hComboShape, 0, "Polygon"); EnableWindow(hBorder, FALSE); EnableWindow(hComboLineStyle, FALSE); EnableWindow(hBorderColor, FALSE); EnableWindow(hBtnLineColor, FALSE); EnableWindow(hBackGround, FALSE); EnableWindow(hBtnBackGroundColor, FALSE); return TRUE; case WM_COMMAND: switch (LOWORD(wp)) { case IDOK: Edit_GetText(hObjectID, lpMysgc->szObjectID, sizeof(lpMysgc->szObjectID)); if (strcmp(lpMysgc->szObjectID, "") == 0) { MessageBox(hDlg, "オブジェクトIDが記入されていません", "Error", MB_OK); return TRUE; } Edit_GetText(hHeight, lpMysgc->szHeight, sizeof(lpMysgc->szHeight)); if (strcmp(lpMysgc->szHeight, "") == 0) { MessageBox(hDlg, "高さが記入されていません", "Error", MB_OK); return TRUE; } Edit_GetText(hWidth, lpMysgc->szWidth, sizeof(lpMysgc->szWidth)); if (strcmp(lpMysgc->szWidth, "") == 0) { MessageBox(hDlg, "幅が記入されていません", "Error", MB_OK); return TRUE; } if (Button_GetCheck(hChkBorder) == BST_CHECKED) { lpMysgc->bBorder = TRUE; Edit_GetText(hBorder, lpMysgc->szBorder, sizeof(lpMysgc->szBorder)); if (strcmp(lpMysgc->szBorder, "") == 0) { MessageBox(hDlg, "オブジェクト境界幅が設定されていません", "Error", MB_OK); return TRUE; } ComboBox_GetText(hComboLineStyle, szBuf, sizeof(szBuf)); if (strcmp(szBuf, "無し") == 0) strcpy(lpMysgc->szLineStyle, "none"); if (strcmp(szBuf, "実線") == 0) strcpy(lpMysgc->szLineStyle, "solid"); if (strcmp(szBuf, "二重線") == 0) strcpy(lpMysgc->szLineStyle, "double"); if (strcmp(szBuf, "溝線") == 0) strcpy(lpMysgc->szLineStyle, "groove"); if (strcmp(szBuf, "稜線") == 0) strcpy(lpMysgc->szLineStyle, "ridge"); if (strcmp(szBuf, "沈み込み") == 0) strcpy(lpMysgc->szLineStyle, "inset"); if (strcmp(szBuf, "浮き上がり") == 0) strcpy(lpMysgc->szLineStyle, "outset"); if (strcmp(szBuf, "") == 0) { MessageBox(hDlg, "境界線のスタイルが選択されていません", "Error", MB_OK); return TRUE; } Edit_GetText(hBorderColor, lpMysgc->szLineColor, sizeof(lpMysgc->szLineColor)); if (strcmp(lpMysgc->szLineColor, "") == 0) { MessageBox(hDlg, "オブジェクト境界色が設定されていません", "Error", MB_OK); return TRUE; } } else { lpMysgc->bBorder = FALSE; } if (Button_GetCheck(hChkBackGround) == BST_CHECKED) { lpMysgc->bBackGround = TRUE; Edit_GetText(hBackGround, lpMysgc->szBackGroundColor, sizeof(lpMysgc->szBackGroundColor)); if (strcmp(lpMysgc->szBackGroundColor, "") == 0) { MessageBox(hDlg, "オブジェクト背景色が設定されていません", "Error", MB_OK); return TRUE; } } else { lpMysgc->bBackGround = FALSE; } ComboBox_GetText(hComboShape, lpMysgc->szShape, sizeof(lpMysgc->szShape)); if (strcmp(lpMysgc->szShape, "") == 0) { MessageBox(hDlg, "形状が選択されていません", "Error", MB_OK); return TRUE; } Edit_GetText(hShapeCoordinate, lpMysgc->szCoordinate, sizeof(lpMysgc->szCoordinate)); if (strcmp(lpMysgc->szCoordinate, "") == 0) { MessageBox(hDlg, "座標が記入されていません", "Error", MB_OK); return TRUE; } Edit_GetText(hShapeBorderColor, lpMysgc->szShapeLineColor, sizeof(lpMysgc->szShapeLineColor)); if (strcmp(lpMysgc->szShapeLineColor, "") == 0) { MessageBox(hDlg, "図形の境界線色が設定されていません", "Error", MB_OK); return TRUE; } Edit_GetText(hShapeFillColor, lpMysgc->szShapeFillColor, sizeof(lpMysgc->szShapeFillColor)); if (strcmp(lpMysgc->szShapeFillColor, "") == 0) { MessageBox(hDlg, "図形の塗りつぶし色が設定されていません", "Error", MB_OK); return TRUE; } EndDialog(hDlg, IDOK); return TRUE; case IDCANCEL: EndDialog(hDlg, IDCANCEL); return TRUE; case IDC_CHECKBORDER: if (Button_GetCheck(hChkBorder) == BST_CHECKED) { EnableWindow(hBorder, TRUE); EnableWindow(hComboLineStyle, TRUE); EnableWindow(hBorderColor, TRUE); EnableWindow(hBtnLineColor, TRUE); } else { EnableWindow(hBorder, FALSE); EnableWindow(hComboLineStyle, FALSE); EnableWindow(hBorderColor, FALSE); EnableWindow(hBtnLineColor, FALSE); } return TRUE; case IDC_CHECKBACKCOLOR: if (Button_GetCheck(hChkBackGround) == BST_CHECKED) { EnableWindow(hBackGround, TRUE); EnableWindow(hBtnBackGroundColor, TRUE); } else { EnableWindow(hBackGround, FALSE); EnableWindow(hBtnBackGroundColor, FALSE); } return TRUE; case IDC_BUTTONLINECOLOR: cr_ln = MyGetColor(hDlg); wsprintf(szBuf, "%d,", GetRValue(cr_ln)); strcpy(lpMysgc->szLineColor, szBuf); wsprintf(szBuf, "%d,", GetGValue(cr_ln)); strcat(lpMysgc->szLineColor, szBuf); wsprintf(szBuf, "%d", GetBValue(cr_ln)); strcat(lpMysgc->szLineColor, szBuf); Edit_SetText(hBorderColor, lpMysgc->szLineColor); return TRUE; case IDC_BUTTONBACKGROUNDCOLOR: cr_bg = MyGetColor(hDlg); wsprintf(szBuf, "%d,", GetRValue(cr_bg)); strcpy(lpMysgc->szBackGroundColor, szBuf); wsprintf(szBuf, "%d,", GetGValue(cr_bg)); strcat(lpMysgc->szBackGroundColor, szBuf); wsprintf(szBuf, "%d", GetBValue(cr_bg)); strcat(lpMysgc->szBackGroundColor, szBuf); Edit_SetText(hBackGround, lpMysgc->szBackGroundColor); return TRUE; case IDC_BUTTONSHAPEBORDERCOLOR: cr_shapeline = MyGetColor(hDlg); wsprintf(szBuf, "%d,", GetRValue(cr_shapeline)); strcpy(lpMysgc->szShapeLineColor, szBuf); wsprintf(szBuf, "%d,", GetGValue(cr_shapeline)); strcat(lpMysgc->szShapeLineColor, szBuf); wsprintf(szBuf, "%d", GetBValue(cr_shapeline)); strcat(lpMysgc->szShapeLineColor, szBuf); Edit_SetText(hShapeBorderColor, lpMysgc->szShapeLineColor); return TRUE; case IDC_BUTTONSHAPEFILLCOLOR: cr_shapefill = MyGetColor(hDlg); wsprintf(szBuf, "%d,", GetRValue(cr_shapefill)); strcpy(lpMysgc->szShapeFillColor, szBuf); wsprintf(szBuf, "%d,", GetGValue(cr_shapefill)); strcat(lpMysgc->szShapeFillColor, szBuf); wsprintf(szBuf, "%d", GetBValue(cr_shapefill)); strcat(lpMysgc->szShapeFillColor, szBuf); Edit_SetText(hShapeFillColor, lpMysgc->szShapeFillColor); return TRUE; } return FALSE; } return FALSE; }
WM_INITDIALOGメッセージが来たら、lpにMYSGC構造体のアドレスが入っているので スタティックな変数にコピーしておき、あとで使います。
色の参照ボタンが押されたときの処理はいつもと同じです。
ちょっと面倒くさいですが、基本的には目新しいことはありません。 「文字の回転」の時と似たような構造なので、ダイアログも新規に作らずに 既存のものに手を加えた方がすっきりしたかも知れません。いろいろ改良してみてください。
Update 16/Dec/2001 By Y.Kumei