📄 cpropcomtoolbar.cpp
字号:
// $Id: CPropComToolbar.cpp,v 1.13 2004/08/18 14:03:45 genta Exp $
/*! @file
@brief 共通設定ダイアログボックス、「バックアップ」ページ
@author Norio Nakatani
$Revision: 1.13 $
*/
/*
Copyright (C) 1998-2001, Norio Nakatani
Copyright (C) 2000-2001, genta, jepro, MIK
This source code is designed for sakura editor.
Please contact the copyright holders to use this code for other purpose.
*/
#include "CPropCommon.h"
#include "CMenuDrawer.h" // 2002/2/10 aroka
#include "debug.h" // 2002/2/10 aroka
//@@@ 2001.02.04 Start by MIK: Popup Help
#if 1 //@@@ 2002.01.03 add MIK
#include "sakura.hh"
static const DWORD p_helpids[] = { //11000
IDC_BUTTON_DELETE, HIDC_BUTTON_DELETE_TOOLBAR, //ツールバーから機能削除
IDC_BUTTON_INSERTSEPARATOR, HIDC_BUTTON_INSERTSEPARATOR_TOOLBAR, //セパレータ挿入
IDC_BUTTON_INSERT, HIDC_BUTTON_INSERT_TOOLBAR, //ツールバーへ機能挿入
IDC_BUTTON_ADD, HIDC_BUTTON_ADD_TOOLBAR, //ツールバーへ機能追加
IDC_BUTTON_UP, HIDC_BUTTON_UP_TOOLBAR, //ツールバーの機能を上へ移動
IDC_BUTTON_DOWN, HIDC_BUTTON_DOWN_TOOLBAR, //ツールバーの機能を下へ移動
IDC_CHECK_TOOLBARISFLAT, HIDC_CHECK_TOOLBARISFLAT, //フラットなボタン
IDC_COMBO_FUNCKIND, HIDC_COMBO_FUNCKIND_TOOLBAR, //機能の種別
IDC_LIST_FUNC, HIDC_LIST_FUNC_TOOLBAR, //機能一覧
IDC_LIST_RES, HIDC_LIST_RES_TOOLBAR, //ツールバー一覧
IDC_LABEL_MENUFUNCKIND, -1,
IDC_LABEL_MENUFUNC, -1,
IDC_LABEL_TOOLBAR, -1,
// IDC_STATIC, -1,
0, 0
};
#else
static const DWORD p_helpids[] = { //11000
IDC_BUTTON_DELETE, 11000, //ツールバーから機能削除
IDC_BUTTON_INSERTSEPARATOR, 11001, //セパレータ挿入
IDC_BUTTON_INSERT, 11002, //ツールバーへ機能挿入
IDC_BUTTON_ADD, 11003, //ツールバーへ機能追加
IDC_BUTTON_UP, 11004, //ツールバーの機能を上へ移動
IDC_BUTTON_DOWN, 11005, //ツールバーの機能を下へ移動
IDC_CHECK_TOOLBARISFLAT, 11010, //フラットなボタン
IDC_COMBO_FUNCKIND, 11030, //機能の種別
IDC_LIST_FUNC, 11040, //機能一覧
IDC_LIST_RES, 11041, //ツールバー一覧
IDC_LABEL_MENUFUNCKIND, -1,
IDC_LABEL_MENUFUNC, -1,
IDC_LABEL_TOOLBAR, -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_TOOLBAR(
HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
return DlgProc( &CPropCommon::DispatchEvent_p6, hwndDlg, uMsg, wParam, lParam );
}
// To Here Jun. 2, 2001 genta
// From Here Apr. 13, 2002 genta
/*!
Owner Draw List Boxに指定の値を挿入する (Windows XPの問題回避用)
Windows XP + manifestの時にLB_INSERTSTRINGが値0を受け付けないので
とりあえず0以外の値を入れてから0に設定し直して回避する。
1回目の挿入は0でなければ何でもいいはず。
@param hWnd [in] リストボックスのウィンドウハンドル
@param index [in] 挿入位置
@param value [in] 挿入する値
@return 挿入位置。エラーの時はLB_ERRまたはLB_ERRSPACE
@date 2002.04.13 genta
*/
int Listbox_INSERTDATA(
HWND hWnd, //!< handle to destination window
int index, //!< item index
int value
)
{
int nIndex1 = ::SendMessage( hWnd, LB_INSERTSTRING, index, 1 );
if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){
::MYMESSAGEBOX( NULL, MB_OK | MB_ICONSTOP | MB_TOPMOST, GSTR_APPNAME,
_T("Toolbar Dialog: 要素の挿入に失敗しました。(%d:%d)"), index, nIndex1 );
return nIndex1;
}
else if( ::SendMessage( hWnd, LB_SETITEMDATA, nIndex1, value ) == LB_ERR ){
::MYMESSAGEBOX( NULL, MB_OK | MB_ICONSTOP | MB_TOPMOST, GSTR_APPNAME,
_T("Toolbar Dialog: INS: 値の設定に失敗しました。:%d"), nIndex1 );
return LB_ERR;
}
return nIndex1;
}
// From Here Apr. 13, 2002 genta
/*!
Owner Draw List Boxに指定の値を追加する (Windows XPの問題回避用)
Windows XP + manifestの時にLB_ADDSTRINGが値0を受け付けないので
とりあえず0以外の値を入れてから0に設定し直して回避する。
1回目の挿入は0でなければ何でもいいはず。
@param hWnd [in] リストボックスのウィンドウハンドル
@param index [in] 挿入位置
@param value [in] 挿入する値
@return 挿入位置。エラーの時はLB_ERRまたはLB_ERRSPACE
@date 2002.04.13 genta
*/
int Listbox_ADDDATA(
HWND hWnd, //!< handle to destination window
int index, //!< item index
int value
)
{
int nIndex1 = ::SendMessage( hWnd, LB_ADDSTRING, index, 1 );
if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){
::MYMESSAGEBOX( NULL, MB_OK | MB_ICONSTOP | MB_TOPMOST, GSTR_APPNAME,
_T("Toolbar Dialog: 要素の追加に失敗しました。(%d:%d)"), index, nIndex1 );
return nIndex1;
}
else if( ::SendMessage( hWnd, LB_SETITEMDATA, nIndex1, value ) == LB_ERR ){
::MYMESSAGEBOX( NULL, MB_OK | MB_ICONSTOP | MB_TOPMOST, GSTR_APPNAME,
_T("Toolbar Dialog: ADD: 値の設定に失敗しました。:%d"), nIndex1 );
return LB_ERR;
}
return nIndex1;
}
/* p6 メッセージ処理 */
INT_PTR CPropCommon::DispatchEvent_p6(
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;
static HWND hwndFuncList;
static HWND hwndResList;
LPDRAWITEMSTRUCT pDis;
int nIndex1;
int nIndex2;
// int nIndex3;
int nNum;
int i;
int j;
static char pszLabel[256];
HDC hdc;
TEXTMETRIC tm;
static int nListItemHeight;
LRESULT lResult;
switch( uMsg ){
case WM_INITDIALOG:
/* ダイアログデータの設定 p6 */
SetData_p6( hwndDlg );
// Modified by KEITA for WIN64 2003.9.6
::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam );
/* コントロールのハンドルを取得 */
hwndCombo = ::GetDlgItem( hwndDlg, IDC_COMBO_FUNCKIND );
hwndFuncList = ::GetDlgItem( hwndDlg, IDC_LIST_FUNC );
hwndResList = ::GetDlgItem( hwndDlg, IDC_LIST_RES );
hdc = ::GetDC( hwndDlg );
::GetTextMetrics( hdc, &tm );
::ReleaseDC( hwndDlg, hdc );
nListItemHeight = 18/*18*/; //Oct. 18, 2000 JEPRO 「ツールバー」タブでの機能アイテムの行間を少し狭くして表示行数を増やした(20→18 これ以上小さくしても効果はないようだ)
if( nListItemHeight < tm.tmHeight ){
nListItemHeight = tm.tmHeight;
}
// nListItemHeight+=2;
// From Here Oct.14, 2000 JEPRO added (Ref. CPropComCustmenu.cpp 内のWM_INITDIALOGを参考にした)
/* キー選択時の処理 */
::SendMessage( hwndDlg, WM_COMMAND, MAKELONG( IDC_COMBO_FUNCKIND, CBN_SELCHANGE ), (LPARAM)hwndCombo );
// To Here Oct. 14, 2000
::SetTimer( hwndDlg, 1, 300, NULL );
return TRUE;
case WM_DRAWITEM:
idCtrl = (UINT) wParam; /* コントロールのID */
pDis = (LPDRAWITEMSTRUCT) lParam; /* 項目描画情報 */
switch( idCtrl ){
case IDC_LIST_RES: /* ツールバーボタン結果リスト */
case IDC_LIST_FUNC: /* ボタン一覧リスト */
DrawToolBarItemList( pDis ); /* ツールバーボタンリストのアイテム描画 */
return TRUE;
}
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_TOOLBAR );
return TRUE;
case PSN_KILLACTIVE:
// MYTRACE( "p6 PSN_KILLACTIVE\n" );
/* ダイアログデータの取得 p6 */
GetData_p6( hwndDlg );
return TRUE;
//@@@ 2002.01.03 YAZAKI 最後に表示していたシートを正しく覚えていないバグ修正
case PSN_SETACTIVE:
m_nPageNum = ID_PAGENUM_TOOLBAR;
return TRUE;
}
break;
case WM_COMMAND:
wNotifyCode = HIWORD( wParam ); /* 通知コード */
wID = LOWORD( wParam ); /* 項目ID? コントロールID? またはアクセラレータID */
hwndCtl = (HWND) lParam; /* コントロールのハンドル */
if( hwndResList == hwndCtl ){
switch( wNotifyCode ){
case LBN_SELCHANGE:
return TRUE;
}
}else
if( hwndCombo == hwndCtl ){
switch( wNotifyCode ){
case CBN_SELCHANGE:
// nIndex = ::SendMessage( hwndKeyList, LB_GETCURSEL, 0, 0 );
nIndex2 = ::SendMessage( hwndCombo, CB_GETCURSEL, 0, 0 );
::SendMessage( hwndFuncList, LB_RESETCONTENT, 0, 0 );
// nNum = ::SendMessage( hwndFuncList, LB_GETCOUNT, 0, 0 );
// for( i = 0; i < nNum; ++i ){
// ::SendMessage( hwndFuncList, LB_DELETESTRING, 0, 0 );
// }
/* 機能一覧に文字列をセット (リストボックス) */
// From Here Oct. 15, 2001 genta Lookupを使うように変更
nNum = m_cLookup.GetItemCount( nIndex2 );
for( i = 0; i < nNum; ++i ){
nIndex1 = m_cLookup.Pos2FuncCode( nIndex2, i );
//@@@ 2002.01.03 YAZAKI m_tbMyButtonなどをCShareDataからCMenuDrawerへ移動したことによる修正。
// for( j = 0; j < m_cShareData.m_nMyButtonNum; ++j ){
// if( m_cShareData.m_tbMyButton[j].idCommand == nIndex1 ){
for( j = 0; j < m_pcMenuDrawer->m_nMyButtonNum; ++j ){
if( m_pcMenuDrawer->m_tbMyButton[j].idCommand == nIndex1 ){ // jは、nIndex1で指定された機能コードを持つ
// To Here Oct. 15, 2001 genta Lookupを使うように変更
break;
}
}
//jepro note: 次行不要???
//@@@ 2002.01.03 YAZAKI m_tbMyButtonなどをCShareDataからCMenuDrawerへ移動したことによる修正。
// if( j < m_cShareData.m_nMyButtonNum ){
if( j < m_pcMenuDrawer->m_nMyButtonNum ){
// /* ツールバーボタンの情報をセット (リストボックス) */
// for( i = 0; i < m_Common.m_nToolBarButtonNum; ++i ){
// From Here Apr. 13, 2002 genta
lResult = ::Listbox_ADDDATA( hwndFuncList, 0, (LPARAM)j );
if( lResult == LB_ERR || lResult == LB_ERRSPACE ){
break;
}
// To Here Apr. 13, 2002 genta
lResult = ::SendMessage( hwndFuncList, LB_SETITEMHEIGHT , lResult, (LPARAM)MAKELPARAM(nListItemHeight, 0) );
// }
}
//jeprotest コメントアウトされていた以下の5行のコメントアウトを解除するとエラーが出る
// if( 0 < ::LoadString( m_hInstance, (nsFuncCode::ppnFuncListArr[nIndex2])[i], pszLabel, sizeof(pszLabel) ) ){
// ::SendMessage( hwndFuncList, LB_ADDSTRING, 0, (LPARAM)pszLabel );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -