⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpropcomcustmenu.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//	$Id: CPropComCustmenu.cpp,v 1.15 2004/08/18 14:03:45 genta Exp $
/*!	@file
	共通設定ダイアログボックス、「カスタムメニュー」ページ

	@author Norio Nakatani
	$Revision: 1.15 $
*/
/*
	Copyright (C) 1998-2001, Norio Nakatani
	Copyright (C) 2000-2001, genta, MIK, jepro

	This source code is designed for sakura editor.
	Please contact the copyright holder to use this code for other purpose.
*/

#include "CPropCommon.h"
#include "CDlgInput1.h"
#include "CDlgOpenFile.h"
#include "etc_uty.h"
#include "debug.h" // 2002/2/10 aroka

//	From Here Sept. 5, 2000 JEPRO 半角カタカナの全角化に伴い文字長を変更(27→46)
#define STR_CUSTMENU_HEAD_LEN 	46
#define STR_CUSTMENU_HEAD		"テキストエディタ カスタムメニュー設定ファイル\x1a"
//	To Here Sept. 5, 2000


//@@@ 2001.02.04 Start by MIK: Popup Help
#if 1	//@@@ 2002.01.03 add MIK
#include "sakura.hh"
static const DWORD p_helpids[] = {	//10100
	IDC_BUTTON_DELETE,				HIDC_BUTTON_DELETE,				//メニューから機能削除
	IDC_BUTTON_INSERTSEPARATOR,		HIDC_BUTTON_INSERTSEPARATOR,	//セパレータ挿入
	IDC_BUTTON_INSERT,				HIDC_BUTTON_INSERT,				//メニューへ機能挿入
	IDC_BUTTON_ADD,					HIDC_BUTTON_ADD,				//メニューへ機能追加
	IDC_BUTTON_UP,					HIDC_BUTTON_UP,					//メニューの機能を上へ移動
	IDC_BUTTON_DOWN,				HIDC_BUTTON_DOWN,				//メニューの機能を下へ移動
	IDC_BUTTON_IMPORT,				HIDC_BUTTON_IMPORT,				//インポート
	IDC_BUTTON_EXPORT,				HIDC_BUTTON_EXPORT,				//エクスポート
	IDC_COMBO_FUNCKIND,				HIDC_COMBO_FUNCKIND,			//機能の種別
	IDC_COMBO_MENU,					HIDC_COMBO_MENU,				//メニューの種別
	IDC_LIST_FUNC,					HIDC_LIST_FUNC,					//機能一覧
	IDC_LIST_RES,					HIDC_LIST_RES,					//メニュー一覧
//	IDC_LABEL_MENUFUNCKIND,			-1,
//	IDC_LABEL_MENUCHOICE,			-1,
//	IDC_LABEL_MENUFUNC,				-1,
//	IDC_LABEL_MENU,					-1,
//	IDC_LABEL_MENUKEYCHANGE,		-1,
//	IDC_STATIC,						-1,
	0, 0
};
#else
static const DWORD p_helpids[] = {	//10100
	IDC_BUTTON_DELETE,				10100,	//メニューから機能削除
	IDC_BUTTON_INSERTSEPARATOR,		10101,	//セパレータ挿入
	IDC_BUTTON_INSERT,				10102,	//メニューへ機能挿入
	IDC_BUTTON_ADD,					10103,	//メニューへ機能追加
	IDC_BUTTON_UP,					10104,	//メニューの機能を上へ移動
	IDC_BUTTON_DOWN,				10105,	//メニューの機能を下へ移動
	IDC_BUTTON_IMPORT,				10106,	//インポート
	IDC_BUTTON_EXPORT,				10107,	//エクスポート
	IDC_COMBO_FUNCKIND,				10130,	//機能の種別
	IDC_COMBO_MENU,					10131,	//メニューの種別
	IDC_LIST_FUNC,					10150,	//機能一覧
	IDC_LIST_RES,					10151,	//メニュー一覧
	IDC_LABEL_MENUFUNCKIND,			-1,
	IDC_LABEL_MENUCHOICE,			-1,
	IDC_LABEL_MENUFUNC,				-1,
	IDC_LABEL_MENU,					-1,
	IDC_LABEL_MENUKEYCHANGE,		-1,
//	IDC_STATIC,						-1,
	0, 0
};
#endif
//@@@ 2001.02.04 End

//	From Here Jun. 2, 2001 genta
/*!
	@param hwndDlg ダイアログボックスのWindow Handle
	@param uMsg メッセージ
	@param wParam パラメータ1
	@param lParam パラメータ2
*/
INT_PTR CALLBACK CPropCommon::DlgProc_PROP_CUSTMENU(
	HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	return DlgProc( &CPropCommon::DispatchEvent_p8, hwndDlg, uMsg, wParam, lParam );
}
//	To Here Jun. 2, 2001 genta

/* p8 メッセージ処理 */
INT_PTR CPropCommon::DispatchEvent_p8(
	HWND	hwndDlg,	// handle to dialog box
	UINT	uMsg,		// message
	WPARAM	wParam,		// first message parameter
	LPARAM	lParam 		// second message parameter
)
{
	WORD		wNotifyCode;
	WORD		wID;
	HWND		hwndCtl;
	NMHDR*		pNMHDR;
	NM_UPDOWN*	pMNUD;
	int			idCtrl;
	static HWND	hwndCOMBO_FUNCKIND;
	static HWND	hwndLIST_FUNC;
	static HWND	hwndCOMBO_MENU;
	static HWND	hwndLIST_RES;
//	static HWND	hwndEDIT_KEY;

//	int			nLength;
//	int			nAssignedKeyNum;
//	const char*	cpszString;

//	int			nIndex;
//	int			nIndex2;
//	int			nIndex3;
	int			i;
//	int			j;
//	int			nNum;
//	int			nFuncCode;

	int			nIdx1;
	int			nIdx2;
	int			nNum2;
	int			nIdx3;
	int			nIdx4;
	char		szLabel[300];
	char		szLabel2[300];
	char		szKey[2];
	int			nFunc;
	char		cKey;
//	WORD		vkey;		// virtual-key code
//	WORD		nCaretPos;	// caret position
//	HWND		hwndLB;		// handle of list box
//	char*		pszWork;
	CDlgInput1	cDlgInput1;

	switch( uMsg ){
	case WM_INITDIALOG:
		/* ダイアログデータの設定 p8 */
		SetData_p8( hwndDlg );
		// Modified by KEITA for WIN64 2003.9.6
		::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam );

		/* コントロールのハンドルを取得 */
		hwndCOMBO_FUNCKIND = ::GetDlgItem( hwndDlg, IDC_COMBO_FUNCKIND );
		hwndLIST_FUNC = ::GetDlgItem( hwndDlg, IDC_LIST_FUNC );
		hwndCOMBO_MENU = ::GetDlgItem( hwndDlg, IDC_COMBO_MENU );
		hwndLIST_RES = ::GetDlgItem( hwndDlg, IDC_LIST_RES );
//		hwndEDIT_KEY = ::GetDlgItem( hwndDlg, IDC_EDIT_KEY );

//		/* ユーザーがエディット コントロールに入力できるテキストの長さを制限する */
//		::SendMessage( hwndEDIT_KEY, EM_LIMITTEXT, (WPARAM)1, 0 );


//		::SendMessage( hwndLIST_FUNC, LB_ADDSTRING, 0, (LPARAM)"テストテスト1" );
//		::SendMessage( hwndLIST_FUNC, LB_ADDSTRING, 0, (LPARAM)"テストテスト2" );
//		::SendMessage( hwndLIST_FUNC, LB_ADDSTRING, 0, (LPARAM)"テストテスト3" );
//		::SendMessage( hwndLIST_FUNC, LB_ADDSTRING, 0, (LPARAM)"テストテスト4" );


		/* キー選択時の処理 */
//		::SendMessage( hwndKeyList, LB_SETCURSEL, (WPARAM)0, (LPARAM)0 );
		::SendMessage( hwndDlg, WM_COMMAND, MAKELONG( IDC_COMBO_FUNCKIND, CBN_SELCHANGE ), (LPARAM)hwndCOMBO_FUNCKIND );
//		::SendMessage( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_KEY, LBN_SELCHANGE ), (LPARAM)hwndKeyList );


		::SetTimer( hwndDlg, 1, 300, NULL );

		return TRUE;

	case WM_NOTIFY:
		idCtrl = (int)wParam;
		pNMHDR = (NMHDR*)lParam;
		pMNUD  = (NM_UPDOWN*)lParam;
		switch( pNMHDR->code ){
		case PSN_HELP:
			OnHelp( hwndDlg, IDD_PROP_CUSTMENU );
			return TRUE;
		case PSN_KILLACTIVE:
//			MYTRACE( "p8 PSN_KILLACTIVE\n" );
			/* ダイアログデータの取得 p8 */
			GetData_p8( hwndDlg );
			return TRUE;
//@@@ 2002.01.03 YAZAKI 最後に表示していたシートを正しく覚えていないバグ修正
		case PSN_SETACTIVE:
			m_nPageNum = ID_PAGENUM_CUSTMENU;
			return TRUE;
		}
		break;

	case WM_COMMAND:
		wNotifyCode = HIWORD(wParam);	/* 通知コード */
		wID = LOWORD(wParam);			/* 項目ID? コントロールID? またはアクセラレータID */
		hwndCtl = (HWND) lParam;		/* コントロールのハンドル */

		switch( wNotifyCode ){
		/* ボタン/チェックボックスがクリックされた */
		case BN_CLICKED:
			switch( wID ){
			case IDC_BUTTON_IMPORT:	/* インポート */
				/* p8:カスタムメニュー設定をインポートする */
				p8_Import_CustMenuSetting( hwndDlg );
				return TRUE;
			case IDC_BUTTON_EXPORT:	/* エクスポート */
				/* p8:カスタムメニュー設定をエクスポートする */
				p8_Export_CustMenuSetting( hwndDlg );
				return TRUE;
			case IDC_BUTTON_MENUNAME:
				//	メニュー文字列の設定
				nIdx1 = ::SendMessage( hwndCOMBO_MENU, CB_GETCURSEL, 0, 0 );
				if( LB_ERR == nIdx1 ){
					break;
				}
				::GetDlgItemText( hwndDlg, IDC_EDIT_MENUNAME,
					m_Common.m_szCustMenuNameArr[nIdx1], MAX_CUSTOM_MENU_NAME_LEN );
				//	Combo Boxも変更 削除&再登録
				::SendMessage( hwndCOMBO_MENU, CB_DELETESTRING, nIdx1, 0 );
				::SendMessage( hwndCOMBO_MENU, CB_INSERTSTRING, nIdx1,
					(LPARAM)m_Common.m_szCustMenuNameArr[nIdx1] );
				// 削除すると選択が解除されるので,元に戻す
				::SendMessage( hwndCOMBO_MENU, CB_SETCURSEL, nIdx1, 0 );
				return TRUE;
			}
			break;	/* BN_CLICKED */
		}

		if( hwndCOMBO_MENU == hwndCtl ){
			switch( wNotifyCode ){
			case CBN_SELCHANGE:
				nIdx1 = ::SendMessage( hwndCOMBO_MENU, CB_GETCURSEL, 0, 0 );
				if( CB_ERR == nIdx1 ){
					break;
				}
				/* メニュー項目一覧に文字列をセット(リストボックス)*/
				::SendMessage( hwndLIST_RES, LB_RESETCONTENT, 0, 0 );
				for( i = 0; i < m_Common.m_nCustMenuItemNumArr[nIdx1]; ++i ){
					if( 0 == m_Common.m_nCustMenuItemFuncArr[nIdx1][i] ){
//						strcpy( szLabel2, "セパレータ" );
//						strcpy( szLabel2, "--------------------------------" );
						strcpy( szLabel2, " ─────────────" );	//Oct. 18, 2000 JEPRO 「ツールバー」タブで使っているセパレータと同じ線種に統一した
					}else{
						//	Oct. 3, 2001 genta
						m_cLookup.Funccode2Name( m_Common.m_nCustMenuItemFuncArr[nIdx1][i], szLabel, 256 );
			//			::LoadString( m_hInstance, m_Common.m_nCustMenuItemFuncArr[nIdx1][i], szLabel, 256 );
						/* キー */
						if( '\0' == m_Common.m_nCustMenuItemKeyArr[nIdx1][i] ){
							strcpy( szLabel2, szLabel );
						}else{
							wsprintf( szLabel2, "%s(%c)", szLabel, m_Common.m_nCustMenuItemKeyArr[nIdx1][i] );
						}
					}
			//		/* キー */
			//		if( '\0' == m_Common.nCustMenuItemKeyArr[nIdx][i] ||
			//			' '  == m_Common.nCustMenuItemKeyArr[nIdx][i] ){
			//			strcpy( szKey, "" );
			//		}else{
			//			sprintf( szKey, "%c", m_Common.nCustMenuItemKeyArr[nIdx][i] );
			//		}
			//		::SetWindowText( hwndEDIT_KEY, szKey );
					::SendMessage( hwndLIST_RES, LB_ADDSTRING, 0, (LPARAM)szLabel2 );
				}
				//	Oct. 15, 2001 genta メニュー名を設定
				::SetDlgItemText( hwndDlg, IDC_EDIT_MENUNAME, m_Common.m_szCustMenuNameArr[nIdx1] );
				
//	From Here Sept. 7, 2000 JEPRO わかりにくいので選択しないようにコメントアウトに変更
//	(実際にはここでは選択されていないようなのでコメントアウトしなくても同じ。選択されているのはSetData_p8()の方)
//				/* カスタムメニューの先頭の項目を選択(リストボックス)*/
//				::SendMessage( hwndLIST_RES, LB_SETCURSEL, (WPARAM)0, (LPARAM)0 );
//	To Here Sept. 7, 2000
				break;	/* CBN_SELCHANGE */
			}
		}else
		if( hwndLIST_RES == hwndCtl ){
			switch( wNotifyCode ){
			case LBN_DBLCLK:
				nIdx1 = ::SendMessage( hwndCOMBO_MENU, CB_GETCURSEL, 0, 0 );
				if( LB_ERR == nIdx1 ){
					break;
				}
				nIdx2 = ::SendMessage( hwndLIST_RES, LB_GETCURSEL, 0, 0 );
				if( LB_ERR == nIdx2 ){
					break;
				}

				if( 0 == m_Common.m_nCustMenuItemFuncArr[nIdx1][nIdx2] ){
					break;
				}

//			idListBox = (int) LOWORD(wParam);	// identifier of list box
//			hwndListBox = (HWND) lParam;		// handle of list box
				wsprintf( szKey, "%c", m_Common.m_nCustMenuItemKeyArr[nIdx1][nIdx2] );
				if( FALSE == cDlgInput1.DoModal( m_hInstance, hwndDlg, "メニューアイテムのアクセスキー設定", "キーを入力してください。", 1, szKey ) ){
					return TRUE;
				}
				//	Oct. 3, 2001 genta
				m_cLookup.Funccode2Name( m_Common.m_nCustMenuItemFuncArr[nIdx1][nIdx2], szLabel, 255 );
				//::LoadString( m_hInstance, m_Common.m_nCustMenuItemFuncArr[nIdx1][nIdx2], szLabel, 255 );
//				if( ( szKey[0] == '\0' ) || ( '0' <= szKey[0] && szKey[0] <= '9' ) || ( 'A' <= szKey[0] && szKey[0] <= 'Z' ) ){
					m_Common.m_nCustMenuItemKeyArr[nIdx1][nIdx2] = szKey[0];
//@@@ 2002.01.08 YAZAKI カスタムメニューでアクセスキーを消した時、左カッコ ( がメニュー項目に一回残るバグ修正
//					wsprintf( szLabel2, "%s(%c)", szLabel, m_Common.m_nCustMenuItemKeyArr[nIdx1][nIdx2] );
					if (m_Common.m_nCustMenuItemKeyArr[nIdx1][nIdx2]){
						wsprintf( szLabel2, "%s(%c)", szLabel, m_Common.m_nCustMenuItemKeyArr[nIdx1][nIdx2] );
					}
					else {
						wsprintf( szLabel2, "%s", szLabel );
					}
//				}else{
//					m_Common.m_nCustMenuItemKeyArr[nIdx1][nIdx2] = '\0';
//					sprintf( szLabel2, "%s", szLabel );
//				}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -