/*! ダイアログ上のコントロールを初期化する @param hwndDlg ダイアログボックスのウィンドウハンドル */ void CPropPlugin::InitDialog( HWND hwndDlg ) { const struct ColumnData_CPropPlugin_Init ColumnList[] = { { STR_PROPCOMPLG_LIST1, 40 }, { STR_PROPCOMPLG_LIST2, 200 }, { STR_PROPCOMPLG_LIST3, 40 }, { STR_PROPCOMPLG_LIST4, 40 }, { STR_PROPCOMPLG_LIST5, 150 }, }; // ListViewの初期化 HWND hListView = ::GetDlgItem( hwndDlg, IDC_PLUGINLIST ); LVCOLUMN sColumn; int pos; RECT rc; ::GetWindowRect( hListView, &rc ); int width = rc.right - rc.left; for( pos = 0; pos < _countof( ColumnList ); ++pos ) { memset_raw( &sColumn, 0, sizeof( sColumn )); sColumn.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT; sColumn.pszText = const_cast<TCHAR*>(LS(ColumnList[pos].titleId)); sColumn.cx = ColumnList[pos].width * width / 499; sColumn.iSubItem = pos; sColumn.fmt = LVCFMT_LEFT; if( ListView_InsertColumn( hListView, pos, &sColumn ) < 0 ) { PleaseReportToAuthor( hwndDlg, _T("PropComMacro::InitDlg::ColumnRegistrationFail") ); return; // よくわからんけど失敗した } } }
void CRecentImp<T, S>::ZeroItem( int nIndex ) { if( ! IsAvailable() ) return; if( nIndex < 0 || nIndex >= m_nArrayCount ) return; memset_raw( GetItemPointer( nIndex ), 0, sizeof(DataType) ); if( m_pbUserItemFavorite ) m_pbUserItemFavorite[nIndex] = false; return; }
// @date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。 CFuncKeyWnd::CFuncKeyWnd() : CWnd(_T("::CFuncKeyWnd")) { int i; LOGFONT lf; m_pcEditDoc = NULL; /* 共有データ構造体のアドレスを返す */ m_pShareData = &GetDllShareData(); m_nCurrentKeyState = -1; for( i = 0; i < _countof(m_szFuncNameArr); ++i ){ m_szFuncNameArr[i][0] = LTEXT('\0'); } // 2002.11.04 Moca Open()側で設定 // m_nButtonGroupNum = 4; for( i = 0; i < _countof( m_hwndButtonArr ); ++i ){ m_hwndButtonArr[i] = NULL; } /* 表示用フォント */ /* LOGFONTの初期化 */ memset_raw( &lf, 0, sizeof(lf) ); lf.lfHeight = DpiPointsToPixels(-9); // 2009.10.01 ryoji 高DPI対応(ポイント数から算出) lf.lfWidth = 0; lf.lfEscapement = 0; lf.lfOrientation = 0; lf.lfWeight = 400; lf.lfItalic = 0x0; lf.lfUnderline = 0x0; lf.lfStrikeOut = 0x0; lf.lfCharSet = 0x80; lf.lfOutPrecision = 0x3; lf.lfClipPrecision = 0x2; lf.lfQuality = 0x1; lf.lfPitchAndFamily = 0x31; _tcscpy( lf.lfFaceName, _T("MS Pゴシック") ); m_hFont = ::CreateFontIndirect( &lf ); m_bSizeBox = false; m_hwndSizeBox = NULL; m_nTimerCount = 0; return; }
/* ツールバー作成 @date @@@ 2002.01.03 YAZAKI m_tbMyButtonなどをCShareDataからCMenuDrawerへ移動したことによる修正。 @date 2005.08.29 aroka ツールバーの折り返し @date 2006.06.17 ryoji ビジュアルスタイルが有効の場合はツールバーを Rebar に入れてサイズ変更時のちらつきを無くす */ void CMainToolBar::CreateToolBar( void ) { if( m_hwndToolBar )return; REBARINFO rbi; REBARBANDINFO rbBand; int nFlag; TBBUTTON tbb; int i; int nIdx; LONG_PTR lToolType; nFlag = 0; // 2006.06.17 ryoji // Rebar ウィンドウの作成 if( IsVisualStyle() ){ // ビジュアルスタイル有効 m_hwndReBar = ::CreateWindowEx( WS_EX_TOOLWINDOW, REBARCLASSNAME, //レバーコントロール NULL, WS_CHILD/* | WS_VISIBLE*/ | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | // 2007.03.08 ryoji WS_VISIBLE 除去 RBS_BANDBORDERS | CCS_NODIVIDER, 0, 0, 0, 0, m_pOwner->GetHwnd(), NULL, CEditApp::getInstance()->GetAppInstance(), NULL ); if( NULL == m_hwndReBar ){ TopWarningMessage( m_pOwner->GetHwnd(), LS(STR_ERR_DLGEDITWND04) ); return; } if( GetDllShareData().m_Common.m_sToolBar.m_bToolBarIsFlat ){ /* フラットツールバーにする/しない */ PreventVisualStyle( m_hwndReBar ); // ビジュアルスタイル非適用のフラットな Rebar にする } ::ZeroMemory(&rbi, sizeof(rbi)); rbi.cbSize = sizeof(rbi); Rebar_SetbarInfo(m_hwndReBar, &rbi); nFlag = CCS_NORESIZE | CCS_NODIVIDER | CCS_NOPARENTALIGN | TBSTYLE_FLAT; // ツールバーへの追加スタイル } /* ツールバーウィンドウの作成 */ m_hwndToolBar = ::CreateWindowEx( 0, TOOLBARCLASSNAME, NULL, WS_CHILD/* | WS_VISIBLE*/ | WS_CLIPCHILDREN | /*WS_BORDER | */ // 2006.06.17 ryoji WS_CLIPCHILDREN 追加 // 2007.03.08 ryoji WS_VISIBLE 除去 /* WS_EX_WINDOWEDGE| */ TBSTYLE_TOOLTIPS | // TBSTYLE_WRAPABLE | // TBSTYLE_ALTDRAG | // CCS_ADJUSTABLE | nFlag, 0, 0, 0, 0, m_pOwner->GetHwnd(), (HMENU)ID_TOOLBAR, CEditApp::getInstance()->GetAppInstance(), NULL ); if( NULL == m_hwndToolBar ){ if( GetDllShareData().m_Common.m_sToolBar.m_bToolBarIsFlat ){ /* フラットツールバーにする/しない */ GetDllShareData().m_Common.m_sToolBar.m_bToolBarIsFlat = FALSE; } TopWarningMessage( m_pOwner->GetHwnd(), LS(STR_ERR_DLGEDITWND05) ); DestroyToolBar(); // 2006.06.17 ryoji } else{ // 2006.09.06 ryoji ツールバーをサブクラス化する g_pOldToolBarWndProc = (WNDPROC)::SetWindowLongPtr( m_hwndToolBar, GWLP_WNDPROC, (LONG_PTR)ToolBarWndProc ); Toolbar_SetButtonSize( m_hwndToolBar, DpiScaleX(22), DpiScaleY(22) ); // 2009.10.01 ryoji 高DPI対応スケーリング Toolbar_ButtonStructSize( m_hwndToolBar, sizeof(TBBUTTON) ); // Oct. 12, 2000 genta // 既に用意されているImage Listをアイコンとして登録 m_pcIcons->SetToolBarImages( m_hwndToolBar ); /* ツールバーにボタンを追加 */ int count = 0; //@@@ 2002.06.15 MIK int nToolBarButtonNum = 0;// 2005/8/29 aroka // From Here 2005.08.29 aroka // はじめにツールバー構造体の配列を作っておく TBBUTTON *pTbbArr = new TBBUTTON[GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonNum]; for( i = 0; i < GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonNum; ++i ){ nIdx = GetDllShareData().m_Common.m_sToolBar.m_nToolBarButtonIdxArr[i]; pTbbArr[nToolBarButtonNum] = m_pOwner->GetMenuDrawer().getButton(nIdx); // セパレータが続くときはひとつにまとめる // 折り返しボタンもTBSTYLE_SEP属性を持っているので // 折り返しの前のセパレータは全て削除される. if( (pTbbArr[nToolBarButtonNum].fsStyle & TBSTYLE_SEP) && (nToolBarButtonNum!=0)){ if( (pTbbArr[nToolBarButtonNum-1].fsStyle & TBSTYLE_SEP) ){ pTbbArr[nToolBarButtonNum-1] = pTbbArr[nToolBarButtonNum]; nToolBarButtonNum--; } } // 仮想折返しボタンがきたら直前のボタンに折返し属性を付ける if( pTbbArr[nToolBarButtonNum].fsState & TBSTATE_WRAP ){ if( nToolBarButtonNum!=0 ){ pTbbArr[nToolBarButtonNum-1].fsState |= TBSTATE_WRAP; } continue; } nToolBarButtonNum++; } // To Here 2005.08.29 aroka for( i = 0; i < nToolBarButtonNum; ++i ){ tbb = pTbbArr[i]; //@@@ 2002.06.15 MIK start switch( tbb.fsStyle ) { case TBSTYLE_DROPDOWN: //ドロップダウン //拡張スタイルに設定 Toolbar_SetExtendedStyle( m_hwndToolBar, TBSTYLE_EX_DRAWDDARROWS ); Toolbar_AddButtons( m_hwndToolBar, 1, &tbb ); count++; break; case TBSTYLE_COMBOBOX: //コンボボックス { RECT rc; TBBUTTONINFO tbi; TBBUTTON my_tbb; LOGFONT lf; switch( tbb.idCommand ) { case F_SEARCH_BOX: if( m_hwndSearchBox ) { break; } //セパレータ作る memset_raw( &my_tbb, 0, sizeof(my_tbb) ); my_tbb.fsStyle = TBSTYLE_BUTTON; //ボタンにしないと描画が乱れる 2005/8/29 aroka my_tbb.idCommand = tbb.idCommand; //同じIDにしておく if( tbb.fsState & TBSTATE_WRAP ){ //折り返し 2005/8/29 aroka my_tbb.fsState |= TBSTATE_WRAP; } Toolbar_AddButtons( m_hwndToolBar, 1, &my_tbb ); count++; //サイズを設定する tbi.cbSize = sizeof(tbi); tbi.dwMask = TBIF_SIZE; tbi.cx = (WORD)DpiScaleX(160); //ボックスの幅 // 2009.10.01 ryoji 高DPI対応スケーリング Toolbar_SetButtonInfo( m_hwndToolBar, tbb.idCommand, &tbi ); //位置とサイズを取得する rc.right = rc.left = rc.top = rc.bottom = 0; Toolbar_GetItemRect( m_hwndToolBar, count-1, &rc ); //コンボボックスを作る // Mar. 8, 2003 genta 検索ボックスを1ドット下にずらした m_hwndSearchBox = CreateWindow( _T("COMBOBOX"), _T("Combo"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN /*| CBS_SORT*/ | CBS_AUTOHSCROLL /*| CBS_DISABLENOSCROLL*/, rc.left, rc.top + 1, rc.right - rc.left, (rc.bottom - rc.top) * 10, m_hwndToolBar, (HMENU)(INT_PTR)tbb.idCommand, CEditApp::getInstance()->GetAppInstance(), NULL ); if( m_hwndSearchBox ) { m_pOwner->SetCurrentFocus(0); lf = m_pOwner->GetLogfont(); //memset_raw( &lf, 0, sizeof(lf) ); lf.lfHeight = DpiPointsToPixels(-9); // Jan. 14, 2003 genta ダイアログにあわせてちょっと小さく // 2009.10.01 ryoji 高DPI対応(ポイント数から算出) lf.lfWidth = 0; lf.lfEscapement = 0; lf.lfOrientation = 0; lf.lfWeight = FW_NORMAL; lf.lfItalic = FALSE; lf.lfUnderline = FALSE; lf.lfStrikeOut = FALSE; //lf.lfCharSet = GetDllShareData().m_Common.m_sView.m_lf.lfCharSet; lf.lfOutPrecision = OUT_TT_ONLY_PRECIS; // Raster Font を使わないように //lf.lfClipPrecision = GetDllShareData().m_Common.m_sView.m_lf.lfClipPrecision; //lf.lfQuality = GetDllShareData().m_Common.m_sView.m_lf.lfQuality; //lf.lfPitchAndFamily = GetDllShareData().m_Common.m_sView.m_lf.lfPitchAndFamily; //_tcsncpy( lf.lfFaceName, GetDllShareData().m_Common.m_sView.m_lf.lfFaceName, _countof(lf.lfFaceName)); // 画面のフォントに設定 2012/11/27 Uchi m_hFontSearchBox = ::CreateFontIndirect( &lf ); if( m_hFontSearchBox ) { ::SendMessage( m_hwndSearchBox, WM_SETFONT, (WPARAM)m_hFontSearchBox, MAKELONG (TRUE, 0) ); } // //入力長制限 // Combo_LimitText( m_hwndSearchBox, (WPARAM)_MAX_PATH - 1 ); //検索ボックスを更新 // 関数化 2010/6/6 Uchi AcceptSharedSearchKey(); m_comboDel = SComboBoxItemDeleter(); // 再表示用の初期化 m_comboDel.pRecent = &m_cRecentSearch; CDialog::SetComboBoxDeleter(m_hwndSearchBox, &m_comboDel); } break; default: break; } } break; case TBSTYLE_BUTTON: //ボタン case TBSTYLE_SEP: //セパレータ default: Toolbar_AddButtons( m_hwndToolBar, 1, &tbb ); count++; break; } //@@@ 2002.06.15 MIK end } if( GetDllShareData().m_Common.m_sToolBar.m_bToolBarIsFlat ){ /* フラットツールバーにする/しない */ lToolType = ::GetWindowLongPtr(m_hwndToolBar, GWL_STYLE); lToolType |= (TBSTYLE_FLAT); ::SetWindowLongPtr(m_hwndToolBar, GWL_STYLE, lToolType); ::InvalidateRect(m_hwndToolBar, NULL, TRUE); } delete []pTbbArr;// 2005/8/29 aroka } // 2006.06.17 ryoji // ツールバーを Rebar に入れる if( m_hwndReBar && m_hwndToolBar ){ // ツールバーの高さを取得する DWORD dwBtnSize = Toolbar_GetButtonSize( m_hwndToolBar ); DWORD dwRows = Toolbar_GetRows( m_hwndToolBar ); // バンド情報を設定する // 以前のプラットフォームに _WIN32_WINNT >= 0x0600 で定義される構造体のフルサイズを渡すと失敗する // 2007.12.21 ryoji rbBand.cbSize = CCSIZEOF_STRUCT( REBARBANDINFO, wID ); rbBand.fMask = RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE; rbBand.fStyle = RBBS_CHILDEDGE; rbBand.hwndChild = m_hwndToolBar; // ツールバー rbBand.cxMinChild = 0; rbBand.cyMinChild = HIWORD(dwBtnSize) * dwRows; rbBand.cx = 250; // バンドを追加する Rebar_InsertBand( m_hwndReBar, -1, &rbBand ); ::ShowWindow( m_hwndToolBar, SW_SHOW ); } return; }
/*! プロパティシートの作成 @date 2002.2.17 YAZAKI CShareDataのインスタンスは、CProcessにひとつあるのみ。 */ INT_PTR CPropCommon::DoPropertySheet( int nPageNum, bool bTrayProc ) { INT_PTR nRet; int nIdx; m_bTrayProc = bTrayProc; // From Here Jun. 2, 2001 genta // Feb. 11, 2007 genta URLをTABと入れ換え // 2007.02.13 順序変更(TABをWINの次に) //! 「共通設定」プロパティシートの作成時に必要な情報の配列. // 順序変更 Win,Toolbar,Tab,Statusbarの順に、File,FileName 順に 2008/6/22 Uchi // DProcの変更 2010/5/9 Uchi static const ComPropSheetInfo ComPropSheetInfoList[] = { { STR_PROPCOMMON_GENERAL, IDD_PROP_GENERAL, CPropGeneral::DlgProc_page }, { STR_PROPCOMMON_WINDOW, IDD_PROP_WIN, CPropWin::DlgProc_page }, { STR_PROPCOMMON_MAINMENU, IDD_PROP_MAINMENU, CPropMainMenu::DlgProc_page }, // 2010/5/8 Uchi { STR_PROPCOMMON_TOOLBAR, IDD_PROP_TOOLBAR, CPropToolbar::DlgProc_page }, { STR_PROPCOMMON_TABS, IDD_PROP_TAB, CPropTab::DlgProc_page }, { STR_PROPCOMMON_STATBAR, IDD_PROP_STATUSBAR, CPropStatusbar::DlgProc_page }, // 文字コード表示指定 2008/6/21 Uchi { STR_PROPCOMMON_EDITING, IDD_PROP_EDIT, CPropEdit::DlgProc_page }, { STR_PROPCOMMON_FILE, IDD_PROP_FILE, CPropFile::DlgProc_page }, { STR_PROPCOMMON_FILENAME, IDD_PROP_FNAME, CPropFileName::DlgProc_page }, { STR_PROPCOMMON_BACKUP, IDD_PROP_BACKUP, CPropBackup::DlgProc_page }, { STR_PROPCOMMON_FORMAT, IDD_PROP_FORMAT, CPropFormat::DlgProc_page }, { STR_PROPCOMMON_SEARCH, IDD_PROP_GREP, CPropGrep::DlgProc_page }, // 2006.08.23 ryoji タイトル変更(Grep -> 検索) { STR_PROPCOMMON_KEYS, IDD_PROP_KEYBIND, CPropKeybind::DlgProc_page }, { STR_PROPCOMMON_CUSTMENU, IDD_PROP_CUSTMENU, CPropCustmenu::DlgProc_page }, { STR_PROPCOMMON_KEYWORD, IDD_PROP_KEYWORD, CPropKeyword::DlgProc_page }, { STR_PROPCOMMON_SUPPORT, IDD_PROP_HELPER, CPropHelper::DlgProc_page }, { STR_PROPCOMMON_MACRO, IDD_PROP_MACRO, CPropMacro::DlgProc_page }, { STR_PROPCOMMON_PLUGIN, IDD_PROP_PLUGIN, CPropPlugin::DlgProc_page }, }; std::tstring sTabname[_countof(ComPropSheetInfoList)]; PROPSHEETPAGE psp[_countof(ComPropSheetInfoList)]; for( nIdx = 0; nIdx < _countof(ComPropSheetInfoList); nIdx++ ){ sTabname[nIdx] = LS(ComPropSheetInfoList[nIdx].m_nTabNameId); PROPSHEETPAGE *p = &psp[nIdx]; memset_raw( p, 0, sizeof_raw( *p ) ); p->dwSize = sizeof_raw( *p ); p->dwFlags = PSP_USETITLE | PSP_HASHELP; p->hInstance = CSelectLang::getLangRsrcInstance(); p->pszTemplate = MAKEINTRESOURCE( ComPropSheetInfoList[nIdx].resId ); p->pszIcon = NULL; p->pfnDlgProc = ComPropSheetInfoList[nIdx].DProc; p->pszTitle = sTabname[nIdx].c_str(); p->lParam = (LPARAM)this; p->pfnCallback = NULL; } // To Here Jun. 2, 2001 genta PROPSHEETHEADER psh; memset_raw( &psh, 0, sizeof_raw( psh ) ); // Jun. 29, 2002 こおり // Windows 95対策.Property SheetのサイズをWindows95が認識できる物に固定する. psh.dwSize = sizeof_old_PROPSHEETHEADER; // JEPROtest Sept. 30, 2000 共通設定の隠れ[適用]ボタンの正体はここ。行頭のコメントアウトを入れ替えてみればわかる psh.dwFlags = PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE | PSH_USEPAGELANG; psh.hwndParent = m_hwndParent; psh.hInstance = CSelectLang::getLangRsrcInstance(); psh.pszIcon = NULL; psh.pszCaption = LS( STR_PROPCOMMON ); //_T("共通設定"); 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( psh.nPages - 1 < psh.nStartPage ){ psh.nStartPage = psh.nPages - 1; } psh.ppsp = psp; psh.pfnCallback = NULL; nRet = MyPropertySheet( &psh ); // 2007.05.24 ryoji 独自拡張プロパティシート if( -1 == nRet ){ TCHAR* 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 ); PleaseReportToAuthor( NULL, LS(STR_ERR_DLGPROPCOMMON24), psh.nStartPage, pszMsgBuf ); ::LocalFree( pszMsgBuf ); } return nRet; }
/*! ダイアログ上のコントロールにデータを設定する @param hwndDlg ダイアログボックスのウィンドウハンドル */ void CPropPlugin::SetData_LIST( HWND hwndDlg ) { int index; LVITEM sItem; PluginRec* plugin_table = m_Common.m_sPlugin.m_PluginTable; ::EnableWindow( ::GetDlgItem( hwndDlg, IDC_PLUGIN_Remove ), FALSE ); ::EnableWindow( ::GetDlgItem( hwndDlg, IDC_PLUGIN_OPTION ), FALSE ); ::EnableWindow( ::GetDlgItem( hwndDlg, IDC_PLUGIN_README ), FALSE ); ::EnableWindow( ::GetDlgItem( hwndDlg, IDC_PLUGIN_URL ), FALSE ); //プラグインリスト HWND hListView = ::GetDlgItem( hwndDlg, IDC_PLUGINLIST ); ListView_DeleteAllItems( hListView ); for( index = 0; index < MAX_PLUGIN; ++index ) { std::basic_string<TCHAR> sDirName; //CPlugin.GetDirName()の結果保持変数 CPlugin* plugin = CPluginManager::getInstance()->GetPlugin( index ); //番号 TCHAR buf[4]; memset_raw( &sItem, 0, sizeof( sItem )); sItem.mask = LVIF_TEXT | LVIF_PARAM; sItem.iItem = index; sItem.iSubItem = 0; _itot( index, buf, 10 ); sItem.pszText = buf; sItem.lParam = index; ListView_InsertItem( hListView, &sItem ); //名前 memset_raw( &sItem, 0, sizeof( sItem )); sItem.iItem = index; sItem.mask = LVIF_TEXT; sItem.iSubItem = 1; if( plugin ) { sItem.pszText = const_cast<LPTSTR>( to_tchar(plugin->m_sName.c_str()) ); } else { sItem.pszText = const_cast<TCHAR*>(_T("-")); } ListView_SetItem( hListView, &sItem ); //状態 memset_raw( &sItem, 0, sizeof( sItem )); sItem.iItem = index; sItem.mask = LVIF_TEXT; sItem.iSubItem = 2; switch( plugin_table[index].m_state ) { case PLS_INSTALLED: sItem.pszText = const_cast<TCHAR*>(LS(STR_PROPCOMPLG_STATE1)); break; case PLS_UPDATED: sItem.pszText = const_cast<TCHAR*>(LS(STR_PROPCOMPLG_STATE2)); break; case PLS_STOPPED: sItem.pszText = const_cast<TCHAR*>(LS(STR_PROPCOMPLG_STATE3)); break; case PLS_LOADED: sItem.pszText = const_cast<TCHAR*>(LS(STR_PROPCOMPLG_STATE4)); break; case PLS_DELETED: sItem.pszText = const_cast<TCHAR*>(LS(STR_PROPCOMPLG_STATE5)); break; case PLS_NONE: sItem.pszText = const_cast<TCHAR*>(_T("")); break; default: sItem.pszText = const_cast<TCHAR*>(LS(STR_PROPCOMPLG_STATE6)); break; } ListView_SetItem( hListView, &sItem ); //読込 sItem.iItem = index; sItem.mask = LVIF_TEXT; sItem.iSubItem = 3; if( plugin_table[index].m_state != PLS_NONE ) { sItem.pszText = const_cast<TCHAR*>(plugin ? LS(STR_PROPCOMPLG_LOAD) : _T("")); } else { sItem.pszText = const_cast<TCHAR*>(_T("")); } ListView_SetItem( hListView, &sItem ); //フォルダ memset_raw( &sItem, 0, sizeof( sItem )); sItem.iItem = index; sItem.mask = LVIF_TEXT; sItem.iSubItem = 4; switch( plugin_table[index].m_state ) { case PLS_INSTALLED: case PLS_UPDATED: case PLS_STOPPED: case PLS_LOADED: if( plugin ) { sDirName = plugin->GetFolderName(); sItem.pszText = const_cast<LPTSTR>( sDirName.c_str() ); } else { sItem.pszText = const_cast<LPTSTR>( to_tchar(plugin_table[index].m_szName) ); } break; default: sItem.pszText = const_cast<TCHAR*>(_T("")); } ListView_SetItem( hListView, &sItem ); } // リストビューの行選択を可能にする. // IE 3.x以降が入っている場合のみ動作する. // これが無くても,番号部分しか選択できないだけで操作自体は可能. DWORD dwStyle; dwStyle = ListView_GetExtendedListViewStyle( hListView ); dwStyle |= LVS_EX_FULLROWSELECT; ListView_SetExtendedListViewStyle( hListView, dwStyle ); return; }