📄 cproptypes.cpp
字号:
return;
}
CPropTypes::~CPropTypes()
{
// if( NULL != m_hbmpToolButtons ){
// /* ビットマップ破棄 */
// ::DeleteObject( m_hbmpToolButtons );
// }
return;
}
/* 初期化 */
void CPropTypes::Create( HINSTANCE hInstApp, HWND hwndParent )
{
m_hInstance = hInstApp; /* アプリケーションインスタンスのハンドル */
m_hwndParent = hwndParent; /* オーナーウィンドウのハンドル */
return;
}
/* 色選択ダイアログ */
BOOL CPropTypes::SelectColor( HWND hwndParent, COLORREF* pColor )
{
int i;
CHOOSECOLOR cc;
DWORD dwCustColors[16];
for( i = 0; i < 16; i++ ){
dwCustColors[i] = (DWORD)RGB( 255, 255, 255 );
}
cc.lStructSize = sizeof( cc );
cc.hwndOwner = hwndParent;
cc.hInstance = NULL;
cc.rgbResult = *pColor;
cc.lpCustColors = (LPDWORD) dwCustColors;
cc.Flags = /*CC_PREVENTFULLOPEN |*/ CC_RGBINIT;
cc.lCustData = NULL;
cc.lpfnHook = NULL;
cc.lpTemplateName = NULL;
if( FALSE == ::ChooseColor( &cc ) ){
return FALSE;
}
*pColor = cc.rgbResult;
return TRUE;
}
/* 色ボタンの描画 */
void CPropTypes::DrawColorButton( DRAWITEMSTRUCT* pDis, COLORREF cColor )
{
// MYTRACE( "pDis->itemAction = " );
COLORREF cBtnHiLight = (COLORREF)::GetSysColor(COLOR_3DHILIGHT);
COLORREF cBtnShadow = (COLORREF)::GetSysColor(COLOR_3DSHADOW);
COLORREF cBtnDkShadow = (COLORREF)::GetSysColor(COLOR_3DDKSHADOW);
COLORREF cBtnFace = (COLORREF)::GetSysColor(COLOR_3DFACE);
COLORREF cRim;
HBRUSH hBrush;
HBRUSH hBrushOld;
HPEN hPen;
HPEN hPenOld;
RECT rc;
RECT rcFocus;
/* ボタンの表面の色で塗りつぶす */
hBrush = ::CreateSolidBrush( cBtnFace );
::FillRect( pDis->hDC, &(pDis->rcItem), hBrush );
::DeleteObject( hBrush );
/* 枠の描画 */
rcFocus = rc = pDis->rcItem;
rc.top += 4;
rc.left += 4;
rc.right -= 4;
rc.bottom -= 4;
rcFocus = rc;
// rc.right -= 11;
if( pDis->itemState & ODS_SELECTED ){
hPen = ::CreatePen( PS_SOLID, 0, cBtnDkShadow );
hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
::MoveToEx( pDis->hDC, 0, pDis->rcItem.bottom - 2, NULL );
::LineTo( pDis->hDC, 0, 0 );
::LineTo( pDis->hDC, pDis->rcItem.right - 1, 0 );
::SelectObject( pDis->hDC, hPenOld );
::DeleteObject( hPen );
hPen = ::CreatePen( PS_SOLID, 0, cBtnShadow );
hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
::MoveToEx( pDis->hDC, 1, pDis->rcItem.bottom - 3, NULL );
::LineTo( pDis->hDC, 1, 1 );
::LineTo( pDis->hDC, pDis->rcItem.right - 2, 1 );
::SelectObject( pDis->hDC, hPenOld );
::DeleteObject( hPen );
hPen = ::CreatePen( PS_SOLID, 0, cBtnHiLight );
hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
::MoveToEx( pDis->hDC, 0, pDis->rcItem.bottom - 1, NULL );
::LineTo( pDis->hDC, pDis->rcItem.right - 1, pDis->rcItem.bottom - 1 );
::LineTo( pDis->hDC, pDis->rcItem.right - 1, -1 );
::SelectObject( pDis->hDC, hPenOld );
::DeleteObject( hPen );
rc.top += 1;
rc.left += 1;
rc.right += 1;
rc.bottom += 1;
rcFocus.top += 1;
rcFocus.left += 1;
rcFocus.right += 1;
rcFocus.bottom += 1;
}else{
hPen = ::CreatePen( PS_SOLID, 0, cBtnHiLight );
hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
::MoveToEx( pDis->hDC, 0, pDis->rcItem.bottom - 2, NULL );
::LineTo( pDis->hDC, 0, 0 );
::LineTo( pDis->hDC, pDis->rcItem.right - 1, 0 );
::SelectObject( pDis->hDC, hPenOld );
::DeleteObject( hPen );
hPen = ::CreatePen( PS_SOLID, 0, cBtnShadow );
hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
::MoveToEx( pDis->hDC, 1, pDis->rcItem.bottom - 2, NULL );
::LineTo( pDis->hDC, pDis->rcItem.right - 2, pDis->rcItem.bottom - 2 );
::LineTo( pDis->hDC, pDis->rcItem.right - 2, 0 );
::SelectObject( pDis->hDC, hPenOld );
::DeleteObject( hPen );
hPen = ::CreatePen( PS_SOLID, 0, cBtnDkShadow );
hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
::MoveToEx( pDis->hDC, 0, pDis->rcItem.bottom - 1, NULL );
::LineTo( pDis->hDC, pDis->rcItem.right - 1, pDis->rcItem.bottom - 1 );
::LineTo( pDis->hDC, pDis->rcItem.right - 1, -1 );
::SelectObject( pDis->hDC, hPenOld );
::DeleteObject( hPen );
}
if( pDis->itemState & ODS_DISABLED ){
}else{
/* 指定色で塗りつぶす */
hBrush = ::CreateSolidBrush( cColor );
hBrushOld = (HBRUSH)::SelectObject( pDis->hDC, hBrush );
cRim = cBtnShadow;
hPen = ::CreatePen( PS_SOLID, 0, cRim );
hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
::RoundRect( pDis->hDC, rc.left, rc.top, rc.right, rc.bottom , 5, 5 );
::SelectObject( pDis->hDC, hPenOld );
::SelectObject( pDis->hDC, hBrushOld );
::DeleteObject( hPen );
::DeleteObject( hBrush );
}
// /* 区切りたて棒 */
// hPen = ::CreatePen( PS_SOLID, 0, cBtnShadow );
// hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
// ::MoveToEx( pDis->hDC, rc.right + 3, rc.top, NULL );
// ::LineTo( pDis->hDC, rc.right + 3, rc.bottom );
// ::SelectObject( pDis->hDC, hPenOld );
// ::DeleteObject( hPen );
//
// hPen = ::CreatePen( PS_SOLID, 0, cBtnHiLight );
// hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
// ::MoveToEx( pDis->hDC, rc.right + 4, rc.top, NULL );
// ::LineTo( pDis->hDC, rc.right + 4, rc.bottom );
// ::SelectObject( pDis->hDC, hPenOld );
// ::DeleteObject( hPen );
//
// /* ▼記号 */
// hPen = ::CreatePen( PS_SOLID, 0, cBtnDkShadow );
// hPenOld = (HPEN)::SelectObject( pDis->hDC, hPen );
// ::MoveToEx( pDis->hDC, rc.right + 6 , rc.top + 6, NULL );
// ::LineTo( pDis->hDC, rc.right + 6 + 5 , rc.top + 6 );
// ::MoveToEx( pDis->hDC, rc.right + 7 , rc.top + 7, NULL );
// ::LineTo( pDis->hDC, rc.right + 7 + 3 , rc.top + 7 );
// ::MoveToEx( pDis->hDC, rc.right + 8 , rc.top + 8, NULL );
// ::LineTo( pDis->hDC, rc.right + 8 + 1 , rc.top + 8 );
// ::SelectObject( pDis->hDC, hPenOld );
// ::DeleteObject( hPen );
/* フォーカスの長方形 */
if( pDis->itemState & ODS_FOCUS ){
rcFocus.top -= 3;
rcFocus.left -= 3;
rcFocus.right += 2;
rcFocus.bottom += 2;
::DrawFocusRect( pDis->hDC, &rcFocus );
}
return;
}
// キーワード:タイプ別設定タブ順序(プロパティシート)
/* プロパティシートの作成 */
int CPropTypes::DoPropertySheet( int nPageNum )
{
int nRet;
PROPSHEETPAGE psp[16];
PROPSHEETHEADER psh;
int nIdx;
m_nMaxLineSize_org = m_Types.m_nMaxLineSize;
nIdx = 0;
memset( &psp[nIdx], 0, sizeof( PROPSHEETPAGE ) );
psp[nIdx].dwSize = sizeof( PROPSHEETPAGE );
psp[nIdx].dwFlags = /*PSP_USEICONID |*/ PSP_USETITLE | PSP_HASHELP;
psp[nIdx].hInstance = m_hInstance;
psp[nIdx].pszTemplate = MAKEINTRESOURCE( IDD_PROPTYPESP1 );
psp[nIdx].pszIcon = NULL/*MAKEINTRESOURCE( IDI_FONT )*/;
psp[nIdx].pfnDlgProc = (DLGPROC)PropTypesP1Proc;
psp[nIdx].pszTitle = "スクリーン";
psp[nIdx].lParam = (LPARAM)this;
psp[nIdx].pfnCallback = NULL;
nIdx++;
// memset( &psp[nIdx], 0, sizeof( PROPSHEETPAGE ) );
// psp[nIdx].dwSize = sizeof( PROPSHEETPAGE );
// psp[nIdx].dwFlags = /*PSP_USEICONID |*/ PSP_USETITLE | PSP_HASHELP;
// psp[nIdx].hInstance = m_hInstance;
// psp[nIdx].pszTemplate = MAKEINTRESOURCE( IDD_PROP1P3 );
// psp[nIdx].pszIcon = NULL /*MAKEINTRESOURCE( IDI_BORDER )*/;
// psp[nIdx].pfnDlgProc = (DLGPROC)PropTypesP3Proc;
// psp[nIdx].pszTitle = "カラー";
// psp[nIdx].lParam = (LPARAM)this;
// psp[nIdx].pfnCallback = NULL;
// nIdx++;
memset( &psp[nIdx], 0, sizeof( PROPSHEETPAGE ) );
psp[nIdx].dwSize = sizeof( PROPSHEETPAGE );
psp[nIdx].dwFlags = /*PSP_USEICONID |*/ PSP_USETITLE | PSP_HASHELP;
psp[nIdx].hInstance = m_hInstance;
psp[nIdx].pszTemplate = MAKEINTRESOURCE( IDD_PROP_COLOR );
psp[nIdx].pszIcon = NULL /*MAKEINTRESOURCE( IDI_BORDER) */;
psp[nIdx].pfnDlgProc = (DLGPROC)PropTypesP3_newProc;
psp[nIdx].pszTitle = "カラー";
psp[nIdx].lParam = (LPARAM)this;
psp[nIdx].pfnCallback = NULL;
nIdx++;
// 2001/06/14 Start by asa-o: タイプ別設定に支援タブ追加
memset( &psp[nIdx], 0, sizeof( PROPSHEETPAGE ) );
psp[nIdx].dwSize = sizeof( PROPSHEETPAGE );
psp[nIdx].dwFlags = PSP_USETITLE | PSP_HASHELP;
psp[nIdx].hInstance = m_hInstance;
psp[nIdx].pszTemplate = MAKEINTRESOURCE( IDD_PROPTYPESP2 );
psp[nIdx].pszIcon = NULL;
psp[nIdx].pfnDlgProc = (DLGPROC)PropTypesP2Proc;
psp[nIdx].pszTitle = "支援";
psp[nIdx].lParam = (LPARAM)this;
psp[nIdx].pfnCallback = NULL;
nIdx++;
// 2001/06/14 End
// 2001.11.17 add start MIK タイプ別設定に正規表現キーワードタブ追加
memset( &psp[nIdx], 0, sizeof( PROPSHEETPAGE ) );
psp[nIdx].dwSize = sizeof( PROPSHEETPAGE );
psp[nIdx].dwFlags = PSP_USETITLE | PSP_HASHELP;
psp[nIdx].hInstance = m_hInstance;
psp[nIdx].pszTemplate = MAKEINTRESOURCE( IDD_PROP_REGEX );
psp[nIdx].pszIcon = NULL;
psp[nIdx].pfnDlgProc = (DLGPROC)PropTypesRegex;
psp[nIdx].pszTitle = "正規表現キーワード";
psp[nIdx].lParam = (LPARAM)this;
psp[nIdx].pfnCallback = NULL;
nIdx++;
// 2001.11.17 add end MIK
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)"タイプ別設定"; // Sept. 8, 2000 jepro 単なる「設定」から変更
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;
// m_hbmpToolButtons = ::LoadBitmap( m_hInstance, MAKEINTRESOURCE( IDB_MYTOOL ) );
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, "作者に教えて欲しいエラー",
"CPropTypes::DoPropertySheet()内でエラーが出ました。\npsh.nStartPage=[%d]\n::PropertySheet()失敗。\n\n%s\n", psh.nStartPage, pszMsgBuf
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -