📄 cpropcommon.cpp
字号:
rc1 = rc0;
rc2 = rc0;
if( (int)pDis->itemID < 0 ){
}else{
//@@@ 2002.01.03 YAZAKI m_tbMyButtonなどをCShareDataからCMenuDrawerへ移動したことによる修正。
// tbb = m_cShareData.m_tbMyButton[pDis->itemData];
tbb = m_pcMenuDrawer->m_tbMyButton[pDis->itemData];
if( 0 != tbb.idCommand ){
/* ビットマップの表示 灰色を透明描画 */
m_pcIcons->Draw( tbb.iBitmap, pDis->hDC, rc.left + 2, rc.top + 2, ILD_NORMAL );
#if 0//////////////////////////////////
/* 再描画用コンパチブルDC */
hdcCompatDC = ::CreateCompatibleDC( pDis->hDC );
/* ビットマップサイズ取得 */
::GetBitmapDimensionEx( m_hbmpToolButtons, &sizDimension );
/* ビットマップ選択 */
m_hbmpCompatBMPOld = (HBITMAP)::SelectObject( hdcCompatDC, m_hbmpToolButtons );
/* ビットマップ描画 */
::BitBlt(
pDis->hDC, // handle to destination device context
rc.left + 2, // x-coordinate of destination rectangle's upper-left corner
rc.top + 2, // x-coordinate of destination rectangle's upper-left corner
16, // width of destination rectangle
// Sept. 17, 2000 JEPRO_16thdot アイコンの16dot目が表示されるように次行を変更
// 15, // height of destination rectangle
16, // height of destination rectangle
hdcCompatDC, // handle to source device context
16 * tbb.iBitmap,// x-coordinate of source rectangle's upper-left corner
0, // y-coordinate of source rectangle's upper-left corner
SRCCOPY // raster operation code
);
// Sept. 17,2000 JEPRO_16thdot アイコンの16dot目が表示されるように次行を変更する必要ある?
// とりあえずそのままで問題なさそうなので変更していない
// Sept. 21, 2000 JEPRO_16thdot やはり念のためここも変更してみた
// CSplitBoxWnd::Draw3dRect( pDis->hDC, rc.left + 0, rc.top + 0, 16 + 4, 15 + 4,
// ::GetSysColor( COLOR_3DLIGHT ), ::GetSysColor( COLOR_3DDKSHADOW )
// );
// CSplitBoxWnd::Draw3dRect( pDis->hDC, rc.left + 1, rc.top + 1, 16 + 2, 15 + 2,
// ::GetSysColor( COLOR_3DHILIGHT ), ::GetSysColor( COLOR_3DSHADOW )
// );
CSplitBoxWnd::Draw3dRect( pDis->hDC, rc.left + 0, rc.top + 0, 16 + 4, 16 + 4,
::GetSysColor( COLOR_3DLIGHT ), ::GetSysColor( COLOR_3DDKSHADOW )
);
CSplitBoxWnd::Draw3dRect( pDis->hDC, rc.left + 1, rc.top + 1, 16 + 2, 16 + 2,
::GetSysColor( COLOR_3DHILIGHT ), ::GetSysColor( COLOR_3DSHADOW )
);
::SelectObject( hdcCompatDC, m_hbmpCompatBMPOld );
::DeleteDC( hdcCompatDC );
#endif //////////////////////////////////
}
if( 0 == tbb.idCommand ){
// nLength = strlen( strcpy( szFuncName, "セパレータ" ) );
// nLength = strlen( strcpy( szFuncName, "---------------------" ) );
// nLength = strlen( strcpy( szLabel, "───────────" ) ); //Oct. 18, 2000 JEPRO 「ツールバー」タブで使っているセパレータ
strcpy( szLabel, "───────────" ); // nLength 未使用 2003/01/09 Moca
// From Here Oct. 15, 2001 genta
}else if( !m_cLookup.Funccode2Name( tbb.idCommand, szLabel, sizeof( szLabel ) )){
wsprintf( szLabel, "%s", "-- UNKNOWN --" );
}
// To Here Oct. 15, 2001 genta
/* アイテムが選択されている */
if( pDis->itemState & ODS_SELECTED ){
// hBrush = ::CreateSolidBrush( ::GetSysColor( COLOR_HIGHLIGHT ) );
hBrush = ::GetSysColorBrush( COLOR_HIGHLIGHT );
::SetTextColor( pDis->hDC, ::GetSysColor( COLOR_HIGHLIGHTTEXT ) );
}else{
// hBrush = ::CreateSolidBrush( ::GetSysColor( COLOR_WINDOW ) );
hBrush = ::GetSysColorBrush( COLOR_WINDOW );
::SetTextColor( pDis->hDC, ::GetSysColor( COLOR_WINDOWTEXT ) );
}
rc1.left++;
rc1.top++;
rc1.right--;
rc1.bottom--;
::FillRect( pDis->hDC, &rc1, hBrush );
// ::DeleteObject( hBrush );
::SetBkMode( pDis->hDC, TRANSPARENT );
::TextOut( pDis->hDC, rc1.left + 4, rc1.top + 2, szLabel, strlen( szLabel ) );
}
/* アイテムにフォーカスがある */
if( pDis->itemState & ODS_FOCUS ){
::DrawFocusRect( pDis->hDC, &rc2 );
}
return;
}
// From Here Jun. 2, 2001 genta
/*!
「共通設定」プロパティシートの作成時に必要な情報を
保持する構造体
*/
struct ComPropSheetInfo {
const char* szTabname; //!< TABの表示名
unsigned int resId; //!< Property sheetに対応するDialog resource
INT_PTR (CALLBACK *DProc)(HWND, UINT, WPARAM, LPARAM);
//!< Dialog Procedure
};
// To Here Jun. 2, 2001 genta
// キーワード:共通設定タブ順序(プロパティシート)
/*! プロパティシートの作成
@date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。
*/
int CPropCommon::DoPropertySheet( int nPageNum/*, int nActiveItem*/ )
{
// m_nActiveItem = nActiveItem;
/* 共有データ構造体のアドレスを返す */
m_pShareData = CShareData::getInstance()->GetShareData();
int nRet;
PROPSHEETPAGE psp[32];
PROPSHEETHEADER psh;
int nIdx;
int i;
// m_Common.m_nMAXLINELEN_org = m_Common.m_nMAXLINELEN;
// From Here Jun. 2, 2001 genta
//! 「共通設定」プロパティシートの作成時に必要な情報の配列.
static ComPropSheetInfo ComPropSheetInfoList[] = {
{ "全般", IDD_PROP1P1, DlgProc_PROP_GENERAL },
{ "ウィンドウ", IDD_PROP_WIN, DlgProc_PROP_WIN },
{ "編集", IDD_PROP_EDIT, DlgProc_PROP_EDIT },
{ "ファイル", IDD_PROP_FILE, DlgProc_PROP_FILE },
{ "バックアップ", IDD_PROP_BACKUP, DlgProc_PROP_BACKUP },
{ "書式", IDD_PROP_FORMAT, DlgProc_PROP_FORMAT },
{ "クリッカブルURL",IDD_PROP_URL, DlgProc_PROP_URL },
{ "Grep", IDD_PROP_GREP, DlgProc_PROP_GREP },
{ "キー割り当て", IDD_PROP_KEYBIND, DlgProc_PROP_KEYBIND },
{ "カスタムメニュー",IDD_PROP_CUSTMENU, DlgProc_PROP_CUSTMENU },
{ "ツールバー", IDD_PROP_TOOLBAR, DlgProc_PROP_TOOLBAR },
{ "強調キーワード", IDD_PROP_KEYWORD, DlgProc_PROP_KEYWORD },
{ "支援", IDD_PROP_HELPER, DlgProc_PROP_HELPER },
{ "マクロ", IDD_PROP_MACRO, DlgProc_PROP_MACRO },
{ "ファイル名表示", IDD_PROP_FNAME, DlgProc_PROP_FILENAME},
};
for( nIdx = 0, i = 0; i < sizeof(ComPropSheetInfoList)/sizeof(ComPropSheetInfoList[0])
&& nIdx < 32 ; i++ ){
if( ComPropSheetInfoList[i].szTabname != NULL ){
PROPSHEETPAGE *p = &psp[nIdx];
memset( p, 0, sizeof( PROPSHEETPAGE ) );
p->dwSize = sizeof( PROPSHEETPAGE );
p->dwFlags = /*PSP_USEICONID |*/ PSP_USETITLE | PSP_HASHELP;
p->hInstance = m_hInstance;
p->pszTemplate = MAKEINTRESOURCE( ComPropSheetInfoList[i].resId );
p->pszIcon = NULL/*MAKEINTRESOURCE( IDI_FONT )*/;
p->pfnDlgProc = (DLGPROC)(ComPropSheetInfoList[i].DProc);
p->pszTitle = ComPropSheetInfoList[i].szTabname;
p->lParam = (LPARAM)this;
p->pfnCallback = NULL;
nIdx++;
}
}
// To Here Jun. 2, 2001 genta
memset( &psh, 0, sizeof( PROPSHEETHEADER ) );
#ifdef _WIN64
psh.dwSize = sizeof( psh );
#else
// Jun. 29, 2002 こおり
// Windows 95対策.Property SheetのサイズをWindows95が認識できる物に固定する.
const size_t sizeof_old_PROPSHEETHEADER=40;
psh.dwSize = sizeof_old_PROPSHEETHEADER;
#endif
// JEPROtest Sept. 30, 2000 共通設定の隠れ[適用]ボタンの正体はここ。行頭のコメントアウトを入れ替えてみればわかる
// psh.dwFlags = /*PSH_USEICONID |*/ /*PSH_NOAPPLYNOW |*/ PSH_PROPSHEETPAGE/* | PSH_HASHELP*/;
psh.dwFlags = /*PSH_USEICONID |*/ PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE/* | PSH_HASHELP*/;
psh.hwndParent = m_hwndParent;
psh.hInstance = m_hInstance;
psh.pszIcon = NULL /*MAKEINTRESOURCE( IDI_CELL_PROPERTIES )*/;
psh.pszCaption = (LPSTR) "共通設定";
psh.nPages = nIdx;
//- 20020106 aroka # psh.nStartPage は unsigned なので負にならない
if( -1 == nPageNum ){
psh.nStartPage = m_nPageNum;
}else
if( 0 > nPageNum ){ //- 20020106 aroka
psh.nStartPage = 0;
}else{
psh.nStartPage = nPageNum;
}
// if( 0 > psh.nStartPage ){ //- 20020106 aroka
// psh.nStartPage = 0;
// }
if( psh.nPages - 1 < psh.nStartPage ){
psh.nStartPage = psh.nPages - 1;
}
psh.ppsp = (LPCPROPSHEETPAGE)psp;
psh.pfnCallback = NULL;
nRet = ::PropertySheet( &psh );
if( -1 == nRet ){
char* pszMsgBuf;
::FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // デフォルト言語
(LPTSTR) &pszMsgBuf,
0,
NULL
);
::MYMESSAGEBOX( NULL, MB_OK | MB_ICONINFORMATION | MB_TOPMOST, "作者に教えて欲しいエラー",
"CPropCommon::DoPropertySheet()内でエラーが出ました。\npsh.nStartPage=[%d]\n::PropertySheet()失敗\n\n%s\n", psh.nStartPage, pszMsgBuf
);
::LocalFree( pszMsgBuf );
}
// {
// CDlgDebug cDlgDebug;
// CMemory cmemDebugInfo;
// char szText[1024];
//
// sprintf( szText, "aaaaaaaaa\r\nbbbbbbbbbbb\r\nccccccccccc\r\n" );
// cmemDebugInfo.Append( szText, strlen( szText ) );
// cDlgDebug.DoModal( m_hInstance, m_hwndParent, cmemDebugInfo );
// }
return nRet;
}
/*! ShareDataから一時領域へ設定をコピーする
@date 2002.12.11 Moca CEditDoc::OpenPropertySheetから移動
*/
void CPropCommon::InitData( void )
{
int i;
m_Common = m_pShareData->m_Common;
m_nKeyNameArrNum = m_pShareData->m_nKeyNameArrNum;
for( i = 0; i < sizeof( m_pShareData->m_pKeyNameArr ) / sizeof( m_pShareData->m_pKeyNameArr[0] ); ++i ){
m_pKeyNameArr[i] = m_pShareData->m_pKeyNameArr[i];
}
m_CKeyWordSetMgr = m_pShareData->m_CKeyWordSetMgr;
//2002/04/25 YAZAKI Types全体を保持する必要はない。
for( i = 0; i < MAX_TYPES; ++i ){
for( int j = 0; j < MAX_KEYWORDSET_PER_TYPE; j++ ){
m_Types_nKeyWordSetIdx[i][j] = m_pShareData->m_Types[i].m_nKeyWordSetIdx[j];
}
}
/* マクロ関係
@@@ 2002.01.03 YAZAKI 共通設定『マクロ』がタブを切り替えるだけで設定が保存されないように。
*/
for( i = 0; i < MAX_CUSTMACRO; ++i ){
m_MacroTable[i] = m_pShareData->m_MacroTable[i];
}
memcpy( m_szMACROFOLDER, m_pShareData->m_szMACROFOLDER, sizeof( m_pShareData->m_szMACROFOLDER ) );
// ファイル名簡易表示関係
memcpy( m_szTransformFileNameFrom, m_pShareData->m_szTransformFileNameFrom,
sizeof( m_pShareData->m_szTransformFileNameFrom ) );
memcpy( m_szTransformFileNameTo, m_pShareData->m_szTransformFileNameTo,
sizeof( m_pShareData->m_szTransformFileNameTo ) );
m_nTransformFileNameArrNum = m_pShareData->m_nTransformFileNameArrNum;
}
/*! ShareData に 設定を適用?コピーする
@note ShareDataにコピーするだけなので,更新要求などは,利用する側で処理してもらう
@date 2002.12.11 Moca CEditDoc::OpenPropertySheetから移動
*/
void CPropCommon::ApplyData( void )
{
int i;
for( i = 0; i < sizeof( m_pShareData->m_pKeyNameArr ) / sizeof( m_pShareData->m_pKeyNameArr[0] ); ++i ){
m_pShareData->m_pKeyNameArr[i] = m_pKeyNameArr[i];
}
m_pShareData->m_CKeyWordSetMgr = m_CKeyWordSetMgr;
m_pShareData->m_Common = m_Common;
for( i = 0; i < MAX_TYPES; ++i ){
//2002/04/25 YAZAKI Types全体を保持する必要はない。
/* 変更された設定値のコピー */
for( int j = 0; j < MAX_KEYWORDSET_PER_TYPE; j++ ){
m_pShareData->m_Types[i].m_nKeyWordSetIdx[j] = m_Types_nKeyWordSetIdx[i][j];
}
}
/* マクロ関係 */
for( i = 0; i < MAX_CUSTMACRO; ++i ){
m_pShareData->m_MacroTable[i] = m_MacroTable[i];
}
memcpy( m_pShareData->m_szMACROFOLDER, m_szMACROFOLDER, sizeof( m_pShareData->m_szMACROFOLDER ) );
// ファイル名簡易表示関係
// 念のため,書き換える前に 0 を設定しておく
m_pShareData->m_nTransformFileNameArrNum = 0;
memcpy( m_pShareData->m_szTransformFileNameFrom, m_szTransformFileNameFrom,
sizeof( m_pShareData->m_szTransformFileNameFrom ) );
memcpy( m_pShareData->m_szTransformFileNameTo, m_szTransformFileNameTo,
sizeof( m_pShareData->m_szTransformFileNameTo ) );
m_pShareData->m_nTransformFileNameArrNum = m_nTransformFileNameArrNum;
}
/* p1 メッセージ処理 */
INT_PTR CPropCommon::DispatchEvent_p1(
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;
int nVal;
// LPDRAWITEMSTRUCT pDis;
switch( uMsg ){
case WM_INITDIALOG:
/* ダイアログデータの設定 p1 */
SetData_p1( hwndDlg );
// Modified by KEITA for WIN64 2003.9.6
::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam );
/* ユーザーがエディット コントロールに入力できるテキストの長さを制限する */
return TRUE;
case WM_COMMAND:
wNotifyCode = HIWORD(wParam); /* 通知コード */
wID = LOWORD(wParam); /* 項目ID? コントロールID? またはアクセラレータID */
// hwndCtl = (HWND) lParam; /* コントロールのハンドル */
switch( wNotifyCode ){
/* ボタン/チェックボックスがクリックされた */
case BN_CLICKED:
switch( wID ){
// /* タスクトレイを使う */
// m_Common.m_bUseTaskTray = ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_USETRAYICON );
// /* タスクトレイに常駐 */
// m_Common.m_bStayTaskTray = ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_STAYTASKTRAY );
case IDC_CHECK_USETRAYICON: /* タスクトレイを使う */
// From Here 2001.12.03 hor
// 操作しにくいって評判だったのでタスクトレイ関係のEnable制御をやめました
//@@@ YAZAKI 2001.12.31 IDC_CHECKSTAYTASKTRAYのアクティブ、非アクティブのみ制御。
if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_USETRAYICON ) ){
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_CHECK_STAYTASKTRAY ), TRUE );
}else{
// ::CheckDlgButton( hwndDlg, IDC_CHECK_STAYTASKTRAY, FALSE ); /* タスクトレイに常駐 */
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_CHECK_STAYTASKTRAY ), FALSE );
}
// if(!::IsDlgButtonChecked( hwndDlg, IDC_CHECK_USETRAYICON ) ){
// ::CheckDlgButton( hwndDlg, IDC_CHECK_STAYTASKTRAY, FALSE ); /* タスクトレイに常駐 */
// }
// To Here 2001.12.03 hor
return TRUE;
case IDC_CHECK_STAYTASKTRAY: /* タスクトレイに常駐 */
//@@@ YAZAKI 2001.12.31 制御しない。
// if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_STAYTASKTRAY ) ){
// ::CheckDlgButton( hwndDlg, IDC_CHECK_USETRAYICON, TRUE ); /* タスクトレイを使う */
// }else{
// }
return TRUE;
#if 0
case IDC_CHECK_INDENT: /* オートインデント */
// MYTRACE( "IDC_CHECK_INDENT\n" );
if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_INDENT ) ){
/* 日本語空白もインデント */
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_CHECK_INDENT_WSPACE ), TRUE );
}else{
/* 日本語空白もインデント */
::EnableWindow( ::GetDlgItem( hwndDlg, IDC_CHECK_INDENT_WSPACE ), FALSE );
}
return TRUE;
#endif
case IDC_BUTTON_CLEAR_MRU_FILE:
/* ファイルの履歴をクリア */
if( IDCANCEL == ::MYMESSAGEBOX( hwndDlg, MB_OKCANCEL | MB_ICONQUESTION, GSTR_APPNAME,
"最近使ったファイルの履歴を削除します。\nよろしいですか?\n" ) ){
return TRUE;
}
//@@@ 2001.12.26 YAZAKI MRUリストは、CMRUに依頼する
// m_pShareData->m_nMRUArrNum = 0;
{
CMRU cMRU;
cMRU.ClearAll();
}
::MYMESSAGEBOX( hwndDlg, MB_OK | MB_ICONINFORMATION, GSTR_APPNAME,
"最近使ったファイルの履歴を削除しました。\n"
);
return TRUE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -