LRESULT LinkListBox_Add(HWND listbox, const Link *link) { WPARAM index = List_AddStringW(listbox, link->name()); List_SetItemData(listbox, index, link); return index; }
/*! 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 value ) { int nIndex1 = List_AddItemData( hWnd, 1 ); if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){ TopErrorMessage( NULL, LS(STR_PROPCOMTOOL_ERR03), nIndex1 ); return nIndex1; } else if( List_SetItemData( hWnd, nIndex1, value ) == LB_ERR ){ TopErrorMessage( NULL, LS(STR_PROPCOMTOOL_ERR04), nIndex1 ); return LB_ERR; } return nIndex1; }
/*! 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 = List_InsertItemData( hWnd, index, 1 ); if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){ TopErrorMessage( NULL, LS(STR_PROPCOMTOOL_ERR01), index, nIndex1 ); return nIndex1; } else if( List_SetItemData( hWnd, nIndex1, value ) == LB_ERR ){ TopErrorMessage( NULL, LS(STR_PROPCOMTOOL_ERR02), nIndex1 ); return LB_ERR; } return nIndex1; }
/* ダイアログデータの設定 */ void CDlgCompare::SetData( void ) { HWND hwndList; int nRowNum; EditNode* pEditNodeArr; EditInfo* pfi; int i; TCHAR szMenu[512]; int nItem; int selIndex = 0; hwndList = :: GetDlgItem( GetHwnd(), IDC_LIST_FILES ); // 2002/2/10 aroka ファイル名で比較しないため不用 (2001.12.26 YAZAKIさん) // // Oct. 15, 2001 genta ファイル名判定の stricmpをbccでも期待通り動かすため // setlocale ( LC_ALL, "C" ); /* 現在開いている編集窓のリストをメニューにする */ nRowNum = CAppNodeManager::getInstance()->GetOpenedWindowArr( &pEditNodeArr, TRUE ); if( nRowNum > 0 ){ // 水平スクロール幅は実際に表示する文字列の幅を計測して決める // 2009.09.26 ryoji CTextWidthCalc calc(hwndList); int score = 0; TCHAR szFile1[_MAX_PATH]; SplitPath_FolderAndFile(m_pszPath, NULL, szFile1); for( i = 0; i < nRowNum; ++i ){ /* トレイからエディタへの編集ファイル名要求通知 */ ::SendMessageAny( pEditNodeArr[i].GetHwnd(), MYWM_GETFILEINFO, 0, 0 ); pfi = (EditInfo*)&m_pShareData->m_sWorkBuffer.m_EditInfo_MYWM_GETFILEINFO; //@@@ 2001.12.26 YAZAKI ファイル名で比較すると(無題)だったときに問題同士の比較ができない if (pEditNodeArr[i].GetHwnd() == CEditWnd::getInstance()->GetHwnd()){ // 2010.07.30 自分の名前もここから設定する CFileNameManager::getInstance()->GetMenuFullLabel_WinListNoEscape( szMenu, _countof(szMenu), pfi, pEditNodeArr[i].m_nId, -1, calc.GetDC() ); ::DlgItem_SetText( GetHwnd(), IDC_STATIC_COMPARESRC, szMenu ); continue; } // 番号は ウィンドウリストと同じになるようにする CFileNameManager::getInstance()->GetMenuFullLabel_WinListNoEscape( szMenu, _countof(szMenu), pfi, pEditNodeArr[i].m_nId, i, calc.GetDC() ); nItem = ::List_AddString( hwndList, szMenu ); List_SetItemData( hwndList, nItem, pEditNodeArr[i].GetHwnd() ); // 横幅を計算する calc.SetTextWidthIfMax(szMenu); // ファイル名一致のスコアを計算する TCHAR szFile2[_MAX_PATH]; SplitPath_FolderAndFile( pfi->m_szPath, NULL, szFile2 ); int scoreTemp = FileMatchScoreSepExt( szFile1, szFile2 ); if( score < scoreTemp ){ // スコアのいいものを選択 score = scoreTemp; selIndex = nItem; } } delete [] pEditNodeArr; // 2002/11/01 Moca 追加 リストビューの横幅を設定。これをやらないと水平スクロールバーが使えない List_SetHorizontalExtent( hwndList, calc.GetCx() ); } List_SetCurSel( hwndList, selIndex ); /* 左右に並べて表示 */ //@@@ 2003.06.12 MIK // TAB 1ウィンドウ表示のときは並べて比較できなくする if( FALSE != m_pShareData->m_Common.m_sTabBar.m_bDispTabWnd && !m_pShareData->m_Common.m_sTabBar.m_bDispTabWndMultiWin ) { m_bCompareAndTileHorz = FALSE; ::EnableWindow( ::GetDlgItem( GetHwnd(), IDC_CHECK_TILE_H ), FALSE ); } ::CheckDlgButton( GetHwnd(), IDC_CHECK_TILE_H, m_bCompareAndTileHorz ); return; }