📄 cpropcomcustmenu.cpp
字号:
}
}
break;
case WM_TIMER:
nIdx1 = ::SendMessage( hwndCOMBO_MENU, CB_GETCURSEL, 0, 0 );
nIdx2 = ::SendMessage( hwndLIST_RES, LB_GETCURSEL, 0, 0 );
nIdx3 = ::SendMessage( hwndCOMBO_FUNCKIND, CB_GETCURSEL, 0, 0 );
nIdx4 = ::SendMessage( hwndLIST_FUNC, LB_GETCURSEL, 0, 0 );
i = ::SendMessage( hwndLIST_RES, LB_GETCOUNT, 0, 0 );
if( LB_ERR == nIdx2 ){
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_DELETE ), FALSE );
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_UP ), FALSE );
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_DOWN ), FALSE );
}else{
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_DELETE ), TRUE );
if( nIdx2 <= 0 ){
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_UP ), FALSE );
}else{
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_UP ), TRUE );
}
if( nIdx2 + 1 >= i ){
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_DOWN ), FALSE );
}else{
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_DOWN ), TRUE );
}
}
if( LB_ERR == nIdx2 || LB_ERR == nIdx4 ){
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_INSERT ), FALSE );
}else{
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_INSERT ), TRUE );
}
if( LB_ERR == nIdx4 ){
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_ADD ), FALSE );
}else{
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_ADD ), TRUE );
}
if( MAX_CUSTOM_MENU_ITEMS <= m_Common.m_nCustMenuItemNumArr[nIdx1] ){
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_INSERTSEPARATOR ), FALSE );
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_INSERT ), FALSE );
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_ADD ), FALSE );
}
if( LB_ERR != nIdx3 && LB_ERR != nIdx4 &&
//0 == nsFuncCode::ppnFuncListArr[nIdx3][nIdx4]
m_cLookup.Pos2FuncCode( nIdx3, nIdx4 ) == 0
){
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_INSERT ), FALSE );
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_ADD ), FALSE );
}
break;
// case WM_VKEYTOITEM:
// vkey = LOWORD(wParam); // virtual-key code
// nCaretPos = HIWORD(wParam); // caret position
// hwndLB = (HWND)lParam; // handle of list box
// MYTRACE( "WM_VKEYTOITEM vkey=%d(%xh) nCaretPos=%d\n", vkey, vkey, nCaretPos );
// nIdx1 = ::SendMessage( hwndCOMBO_MENU, CB_GETCURSEL, 0, 0 );
// if( ( '0' <= vkey && vkey <= '9' ) || ( 'A' <= vkey && vkey <= 'Z' ) ){
// m_Common.m_nCustMenuItemKeyArr[nIdx1][nCaretPos] = (char)vkey;
//
//// ::SendMessage( hwndLIST_RES, LB_GETTEXT, nCaretPos, (LPARAM)szLabel );
//// sprintf( szLabel2, "%c %s", m_Common.m_nCustMenuItemKeyArr[nIdx1][nCaretPos], szLabel );
//// ::SendMessage( hwndLIST_RES, LB_INSERTSTRING, nCaretPos, (LPARAM)szLabel2 );
//// ::SendMessage( hwndLIST_RES, LB_DELETESTRING, nCaretPos + 1, 0 );
// }
// return -1;
case WM_DESTROY:
::KillTimer( hwndDlg, 1 );
break;
//@@@ 2001.02.04 Start by MIK: Popup Help
case WM_HELP:
{
HELPINFO *p = (HELPINFO *)lParam;
::WinHelp( (HWND)p->hItemHandle, m_szHelpFile, HELP_WM_HELP, (ULONG_PTR)(LPVOID)p_helpids );
}
return TRUE;
/*NOTREACHED*/
//break;
//@@@ 2001.02.04 End
//@@@ 2001.12.22 Start by MIK: Context Menu Help
//Context Menu
case WM_CONTEXTMENU:
::WinHelp( hwndDlg, m_szHelpFile, HELP_CONTEXTMENU, (ULONG_PTR)(LPVOID)p_helpids );
return TRUE;
//@@@ 2001.12.22 End
}
return FALSE;
}
/* ダイアログデータの設定 p8 */
void CPropCommon::SetData_p8( HWND hwndDlg )
{
HWND hwndCOMBO_MENU;
HWND hwndCombo;
// HWND hwndKeyList; //Oct. 14, 2000 JEPRO killed
HWND hwndLIST_RES;
// HWND hwndEDIT_KEY;
int i;
int nIdx;
char szLabel[300];
char szLabel2[300];
// char szKey[2];
/* 機能種別一覧に文字列をセット(コンボボックス) */
hwndCombo = ::GetDlgItem( hwndDlg, IDC_COMBO_FUNCKIND );
m_cLookup.SetCategory2Combo( hwndCombo ); // Oct. 3, 2001 genta
#if 0
for( i = 0; i < nsFuncCode::nFuncKindNum; ++i ){
::SendMessage( hwndCombo, CB_ADDSTRING, 0, (LPARAM)nsFuncCode::ppszFuncKind[i] );
}
#endif
/* 種別の先頭の項目を選択(コンボボックス)*/
// ::SendMessage( hwndCombo, CB_SETCURSEL, (WPARAM)1, (LPARAM)0 );
::SendMessage( hwndCombo, CB_SETCURSEL, (WPARAM)0, (LPARAM)0 ); //Oct. 14, 2000 JEPRO 「--未定義--」を表示させないように大元 Funcode.cpp で変更してある
/* キー一覧に文字列をセット(リストボックス)*/
// Oct. 14, 2000 JEPRO note: ここのforブロックでは実際にはリストを書いていないようなのでコメントアウトした
/*
hwndKeyList = ::GetDlgItem( hwndDlg, IDC_LIST_KEY );
/ for( i = 0; i < m_nKeyNameArrNum; ++i ){
::SendMessage( hwndKeyList, LB_ADDSTRING, 0, (LPARAM)m_pKeyNameArr[i].m_szKeyName );
}
*/
/* メニュー一覧に文字列をセット(コンボボックス)*/
hwndCOMBO_MENU = ::GetDlgItem( hwndDlg, IDC_COMBO_MENU );
for( i = 0; i < MAX_CUSTOM_MENU; ++i ){
::SendMessage( hwndCOMBO_MENU, CB_ADDSTRING, 0, (LPARAM)m_Common.m_szCustMenuNameArr[i] );
}
/* メニュー一覧の先頭の項目を選択(コンボボックス)*/
::SendMessage( hwndCOMBO_MENU, CB_SETCURSEL, (WPARAM)0, (LPARAM)0 );
/* メニュー項目一覧に文字列をセット(リストボックス)*/
hwndLIST_RES = ::GetDlgItem( hwndDlg, IDC_LIST_RES );
// hwndEDIT_KEY = ::GetDlgItem( hwndDlg, IDC_EDIT_KEY );
::SendMessage( hwndLIST_RES, LB_RESETCONTENT, 0, 0 );
nIdx = 0;
for( i = 0; i < m_Common.m_nCustMenuItemNumArr[nIdx]; ++i ){
if( 0 == m_Common.m_nCustMenuItemFuncArr[nIdx][i] ){
// strcpy( szLabel, "セパレータ" ); //Oct. 8, 2000 jepro iniファイルやデフォルト設定などの情報から入る文字列
// strcpy( szLabel, "--------------------------------" );
strcpy( szLabel, " ─────────────" ); //Oct. 18, 2000 JEPRO 「ツールバー」タブで使っているセパレータと同じ線種に統一した
}else{
// Oct. 3, 2001 genta
m_cLookup.Funccode2Name( m_Common.m_nCustMenuItemFuncArr[nIdx][i], szLabel, 256 );
//::LoadString( m_hInstance, m_Common.m_nCustMenuItemFuncArr[nIdx][i], szLabel, 256 );
}
/* キー */
if( '\0' == m_Common.m_nCustMenuItemKeyArr[nIdx][i] ){
strcpy( szLabel2, szLabel );
}else{
wsprintf( szLabel2, "%s(%c)", szLabel, m_Common.m_nCustMenuItemKeyArr[nIdx][i] );
}
// Oct. 14, 2000 JEPRO {}の対応を検索しやすいように部分的にコメントアウトせず、ペアになるように冗長でも上から次の1行をコピー
// if( '\0' == m_Common.m_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[0] );
// /* カスタムメニューの先頭の項目を選択(リストボックス)*/ //Oct. 8, 2000 JEPRO ここをコメントアウトすると先頭項目が選択されなくなる
::SendMessage( hwndLIST_RES, LB_SETCURSEL, (WPARAM)0, (LPARAM)0 );
return;
}
/* ダイアログデータの取得 p8 */
int CPropCommon::GetData_p8( HWND hwndDlg )
{
//@@@ 2002.01.03 YAZAKI 最後に表示していたシートを正しく覚えていないバグ修正
// m_nPageNum = ID_PAGENUM_CUSTMENU;
return TRUE;
}
/* p8:カスタムメニュー設定をインポートする */
void CPropCommon::p8_Import_CustMenuSetting( HWND hwndDlg )
{
CDlgOpenFile cDlgOpenFile;
char szPath[_MAX_PATH + 1];
HFILE hFile;
// char szLine[1024];
// int i;
char pHeader[STR_CUSTMENU_HEAD_LEN + 1];
// short nKeyNameArrNum; /* キー割り当て表の有効データ数 */
// KEYDATA pKeyNameArr[100]; /* キー割り当て表 */
HWND hwndCtrl;
char szInitDir[_MAX_PATH + 1];
strcpy( szPath, "" );
strcpy( szInitDir, m_pShareData->m_szIMPORTFOLDER ); /* インポート用フォルダ */
/* ファイルオープンダイアログの初期化 */
cDlgOpenFile.Create(
m_hInstance,
hwndDlg,
"*.mnu",
szInitDir
);
if( !cDlgOpenFile.DoModal_GetOpenFileName( szPath ) ){
return;
}
/* ファイルのフルパスを、フォルダとファイル名に分割 */
/* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */
::SplitPath_FolderAndFile( szPath, m_pShareData->m_szIMPORTFOLDER, NULL );
strcat( m_pShareData->m_szIMPORTFOLDER, "\\" );
hFile = _lopen( szPath, OF_READ );
if( HFILE_ERROR == hFile ){
::MYMESSAGEBOX( hwndDlg, MB_OK | MB_ICONSTOP, GSTR_APPNAME,
"ファイルを開けませんでした。\n\n%s", szPath
);
return;
}
if( STR_CUSTMENU_HEAD_LEN != _lread( hFile, (LPVOID)pHeader, STR_CUSTMENU_HEAD_LEN ) ||
sizeof( m_Common.m_szCustMenuNameArr ) != _lread( hFile, (LPVOID)&m_Common.m_szCustMenuNameArr , sizeof( m_Common.m_szCustMenuNameArr ) ) ||
sizeof( m_Common.m_nCustMenuItemNumArr ) != _lread( hFile, (LPVOID)&m_Common.m_nCustMenuItemNumArr , sizeof( m_Common.m_nCustMenuItemNumArr ) ) ||
sizeof( m_Common.m_nCustMenuItemFuncArr ) != _lread( hFile, (LPVOID)&m_Common.m_nCustMenuItemFuncArr, sizeof( m_Common.m_nCustMenuItemFuncArr ) ) ||
sizeof( m_Common.m_nCustMenuItemKeyArr ) != _lread( hFile, (LPVOID)&m_Common.m_nCustMenuItemKeyArr , sizeof( m_Common.m_nCustMenuItemKeyArr ) ) ||
0 != memcmp( pHeader, STR_CUSTMENU_HEAD, STR_CUSTMENU_HEAD_LEN )
){
::MYMESSAGEBOX( hwndDlg, MB_OK | MB_ICONSTOP, GSTR_APPNAME,
"カスタムメニュー設定ファイルの形式が違います。\n\n%s", szPath
);
return;
}
_lclose( hFile );
hwndCtrl = ::GetDlgItem( hwndDlg, IDC_COMBO_MENU );
::SendMessage( hwndDlg, WM_COMMAND, MAKELONG( IDC_COMBO_MENU, CBN_SELCHANGE ), (LPARAM)hwndCtrl );
return;
}
/* p8:カスタムメニュー設定をエクスポートする */
void CPropCommon::p8_Export_CustMenuSetting( HWND hwndDlg )
{
CDlgOpenFile cDlgOpenFile;
char szPath[_MAX_PATH + 1];
HFILE hFile;
// char szLine[1024];
// int i;
char szInitDir[_MAX_PATH + 1];
strcpy( szPath, "" );
strcpy( szInitDir, m_pShareData->m_szIMPORTFOLDER ); /* インポート用フォルダ */
/* ファイルオープンダイアログの初期化 */
cDlgOpenFile.Create(
m_hInstance,
hwndDlg,
"*.mnu",
szInitDir
);
if( !cDlgOpenFile.DoModal_GetSaveFileName( szPath ) ){
return;
}
/* ファイルのフルパスを、フォルダとファイル名に分割 */
/* [c:\work\test\aaa.txt] → [c:\work\test] + [aaa.txt] */
::SplitPath_FolderAndFile( szPath, m_pShareData->m_szIMPORTFOLDER, NULL );
strcat( m_pShareData->m_szIMPORTFOLDER, "\\" );
hFile = _lcreat( szPath, 0 );
if( HFILE_ERROR == hFile ){
::MYMESSAGEBOX( hwndDlg, MB_OK | MB_ICONSTOP, GSTR_APPNAME,
"ファイルを開けませんでした。\n\n%s", szPath
);
return;
}
// /* カスタムメニュー情報 */
// char m_szCustMenuNameArr[MAX_CUSTOM_MENU][MAX_CUSTOM_MENU_NAME_LEN + 1];
// int m_nCustMenuItemNumArr [MAX_CUSTOM_MENU];
// int m_nCustMenuItemFuncArr[MAX_CUSTOM_MENU][MAX_CUSTOM_MENU_ITEMS];
// char m_nCustMenuItemKeyArr [MAX_CUSTOM_MENU][MAX_CUSTOM_MENU_ITEMS];
if( STR_CUSTMENU_HEAD_LEN != _lwrite( hFile, (LPCSTR)STR_CUSTMENU_HEAD, STR_CUSTMENU_HEAD_LEN ) ||
sizeof( m_Common.m_szCustMenuNameArr ) != _lwrite( hFile, (LPCSTR)&m_Common.m_szCustMenuNameArr , sizeof( m_Common.m_szCustMenuNameArr ) ) ||
sizeof( m_Common.m_nCustMenuItemNumArr ) != _lwrite( hFile, (LPCSTR)&m_Common.m_nCustMenuItemNumArr , sizeof( m_Common.m_nCustMenuItemNumArr ) ) ||
sizeof( m_Common.m_nCustMenuItemFuncArr ) != _lwrite( hFile, (LPCSTR)&m_Common.m_nCustMenuItemFuncArr, sizeof( m_Common.m_nCustMenuItemFuncArr ) ) ||
sizeof( m_Common.m_nCustMenuItemKeyArr ) != _lwrite( hFile, (LPCSTR)&m_Common.m_nCustMenuItemKeyArr , sizeof( m_Common.m_nCustMenuItemKeyArr ) )
){
::MYMESSAGEBOX( hwndDlg, MB_OK | MB_ICONSTOP, GSTR_APPNAME,
"ファイルの書き込みに失敗しました。\n\n%s", szPath
);
return;
}
_lclose( hFile );
return;
}
/*[EOF]*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -