SizeI GetIdealSize(LabelWithCloseWnd *w) { WCHAR *s = win::GetText(w->hwnd); SizeI size = TextSizeInHwnd(w->hwnd, s); free(s); int btnDx = DpiScaleX(w->hwnd, CLOSE_BTN_DX); int btnDy = DpiScaleY(w->hwnd, CLOSE_BTN_DY); size.dx += btnDx; size.dx += DpiScaleX(w->hwnd, LABEL_BUTTON_SPACE_DX); size.dx += 2 * DpiScaleX(w->hwnd, w->padX); if (size.dy < btnDy) { size.dy = btnDy; } size.dy += 2 * DpiScaleY(w->hwnd, w->padY); return size; }
static void CalcCloseButtonPos(LabelWithCloseWnd *w, int dx, int dy) { int btnDx = DpiScaleX(w->hwnd, CLOSE_BTN_DX); int btnDy = DpiScaleY(w->hwnd, CLOSE_BTN_DY); int x = dx - btnDx - DpiScaleX(w->hwnd, w->padX); int y = 0; if (dy > btnDy) { y = (dy - btnDy) / 2; } w->closeBtnPos = RectI(x, y, btnDx, btnDy); }
/* ダイアログデータの設定 Toolbar */ void CPropToolbar::SetData( HWND hwndDlg ) { HWND hwndCombo; HWND hwndResList; int i; int nListItemHeight; LRESULT lResult; /* 機能種別一覧に文字列をセット(コンボボックス) */ hwndCombo = ::GetDlgItem( hwndDlg, IDC_COMBO_FUNCKIND ); m_cLookup.SetCategory2Combo( hwndCombo ); // Oct. 15, 2001 genta /* 種別の先頭の項目を選択(コンボボックス) */ Combo_SetCurSel( hwndCombo, 0 ); //Oct. 14, 2000 JEPRO JEPRO 「--未定義--」を表示させないように大元 Funcode.cpp で変更してある ::PostMessageCmd( hwndCombo, WM_COMMAND, MAKELONG( IDC_COMBO_FUNCKIND, CBN_SELCHANGE ), (LPARAM)hwndCombo ); /* コントロールのハンドルを取得 */ hwndResList = ::GetDlgItem( hwndDlg, IDC_LIST_RES ); // 2014.11.25 フォントの高さが正しくなかったバグを修正 int nFontHeight = CTextWidthCalc(hwndResList).GetTextHeight(); nListItemHeight = std::max(nFontHeight, GetSystemMetrics(SM_CYSMICON)) + DpiScaleY(2); /* ツールバーボタンの情報をセット(リストボックス)*/ for( i = 0; i < m_Common.m_sToolBar.m_nToolBarButtonNum; ++i ){ // From Here Apr. 13, 2002 genta lResult = ::Listbox_ADDDATA( hwndResList, (LPARAM)m_Common.m_sToolBar.m_nToolBarButtonIdxArr[i] ); if( lResult == LB_ERR || lResult == LB_ERRSPACE ){ break; } // To Here Apr. 13, 2002 genta lResult = List_SetItemHeight( hwndResList, lResult, nListItemHeight ); } /* ツールバーの先頭の項目を選択(リストボックス)*/ List_SetCurSel( hwndResList, 0 ); //Oct. 14, 2000 JEPRO ここをコメントアウトすると先頭項目が選択されなくなる /* フラットツールバーにする/しない */ ::CheckDlgButton( hwndDlg, IDC_CHECK_TOOLBARISFLAT, m_Common.m_sToolBar.m_bToolBarIsFlat ); return; }
static void PaintHDC(LabelWithCloseWnd *w, HDC hdc, const PAINTSTRUCT &ps) { HBRUSH br = CreateSolidBrush(w->bgCol); FillRect(hdc, &ps.rcPaint, br); ClientRect cr(w->hwnd); int x = DpiScaleX(w->hwnd, w->padX); int y = DpiScaleY(w->hwnd, w->padY); UINT opts = ETO_OPAQUE; if (IsRtl(w->hwnd)) { opts = opts | ETO_RTLREADING; } HGDIOBJ prevFont = nullptr; if (w->font) { prevFont = SelectObject(hdc, w->font); } SetTextColor(hdc, w->txtCol); SetBkColor(hdc, w->bgCol); WCHAR *s = win::GetText(w->hwnd); ExtTextOut(hdc, x, y, opts, nullptr, s, (UINT)str::Len(s), nullptr); free(s); // Text might be too long and invade close button area. We just re-paint // the background, which is not the pretties but works. // A better way would be to intelligently truncate text or shrink the font // size (within reason) x = w->closeBtnPos.x - DpiScaleX(w->hwnd, LABEL_BUTTON_SPACE_DX); RectI ri(x, 0, cr.dx - x, cr.dy); RECT r = ri.ToRECT(); FillRect(hdc, &r, br); DrawCloseButton(hdc, w); DeleteObject(br); if (w->font) { SelectObject(hdc, prevFont); } }
/* ツールバー作成 @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; }
static inline SizeI GetTabSize(HWND hwnd) { int dx = DpiScaleX(hwnd, std::max(gGlobalPrefs->prereleaseSettings.tabWidth, MIN_TAB_WIDTH)); int dy = DpiScaleY(hwnd, TABBAR_HEIGHT); return SizeI(dx, dy); }
int GetTabbarHeight(HWND hwnd, float factor) { int dy = DpiScaleY(hwnd, TABBAR_HEIGHT); return (int)(dy * factor); }
/* Toolbar メッセージ処理 */ INT_PTR CPropToolbar::DispatchEvent( 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; 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 int nListItemHeight; LRESULT lResult; switch( uMsg ){ case WM_INITDIALOG: /* コントロールのハンドルを取得 */ hwndCombo = ::GetDlgItem( hwndDlg, IDC_COMBO_FUNCKIND ); hwndFuncList = ::GetDlgItem( hwndDlg, IDC_LIST_FUNC ); hwndResList = ::GetDlgItem( hwndDlg, IDC_LIST_RES ); { // 2014.11.25 フォントの高さが正しくなかったバグを修正 CTextWidthCalc calc(hwndResList); int nFontHeight = calc.GetTextHeight(); nListItemHeight = std::max(nFontHeight, GetSystemMetrics(SM_CYSMICON)) + DpiScaleY(2); nToolBarListBoxTopMargin = (nListItemHeight - (nFontHeight + 1)) / 2; } /* ダイアログデータの設定 Toolbar */ SetData( hwndDlg ); // Modified by KEITA for WIN64 2003.9.6 ::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam ); // From Here Oct.14, 2000 JEPRO added (Ref. CPropComCustmenu.cpp 内のWM_INITDIALOGを参考にした) /* キー選択時の処理 */ ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_COMBO_FUNCKIND, CBN_SELCHANGE ), (LPARAM)hwndCombo ); // To Here Oct. 14, 2000 ::SetTimer( hwndDlg, 1, 300, NULL ); SetDlgItemsEnableState( hwndDlg, hwndResList, hwndFuncList ); 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; switch( pNMHDR->code ){ case PSN_HELP: OnHelp( hwndDlg, IDD_PROP_TOOLBAR ); return TRUE; case PSN_KILLACTIVE: // MYTRACE( _T("PROP_TOOLBAR PSN_KILLACTIVE\n") ); /* ダイアログデータの取得 Toolbar */ GetData( hwndDlg ); return TRUE; //@@@ 2002.01.03 YAZAKI 最後に表示していたシートを正しく覚えていないバグ修正 case PSN_SETACTIVE: m_nPageNum = ID_PROPCOM_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: nIndex2 = Combo_GetCurSel( hwndCombo ); List_ResetContent( hwndFuncList ); /* 機能一覧に文字列をセット (リストボックス) */ // From Here Oct. 15, 2001 genta Lookupを使うように変更 nNum = m_cLookup.GetItemCount( nIndex2 ); for( i = 0; i < nNum; ++i ){ nIndex1 = m_cLookup.Pos2FuncCode( nIndex2, i ); int nbarNo = m_pcMenuDrawer->FindToolbarNoFromCommandId( nIndex1 ); if( nbarNo >= 0 ){ /* ツールバーボタンの情報をセット (リストボックス) */ lResult = ::Listbox_ADDDATA( hwndFuncList, (LPARAM)nbarNo ); if( lResult == LB_ERR || lResult == LB_ERRSPACE ){ break; } lResult = List_SetItemHeight( hwndFuncList, lResult, nListItemHeight ); } } return TRUE; } }else{ switch( wNotifyCode ){ /* ボタン/チェックボックスがクリックされた */ case BN_CLICKED: switch( wID ){ case IDC_BUTTON_INSERTSEPARATOR: nIndex1 = List_GetCurSel( hwndResList ); if( LB_ERR == nIndex1 ){ // break; nIndex1 = 0; } // From Here Apr. 13, 2002 genta nIndex1 = ::Listbox_INSERTDATA( hwndResList, nIndex1, 0 ); if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){ break; } // To Here Apr. 13, 2002 genta List_SetCurSel( hwndResList, nIndex1 ); break; // 2005/8/9 aroka 折返ボタンが押されたら、右のリストに「ツールバー折返」を追加する。 case IDC_BUTTON_INSERTWRAP: nIndex1 = List_GetCurSel( hwndResList ); if( LB_ERR == nIndex1 ){ // break; nIndex1 = 0; } // From Here Apr. 13, 2002 genta // 2010.06.25 Moca 折り返しのツールバーのボタン番号定数名を変更。最後ではなく固定値にする nIndex1 = ::Listbox_INSERTDATA( hwndResList, nIndex1, CMenuDrawer::TOOLBAR_BUTTON_F_TOOLBARWRAP ); if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){ break; } // To Here Apr. 13, 2002 genta List_SetCurSel( hwndResList, nIndex1 ); break; case IDC_BUTTON_DELETE: nIndex1 = List_GetCurSel( hwndResList ); if( LB_ERR == nIndex1 ){ break; } i = List_DeleteString( hwndResList, nIndex1 ); if( i == LB_ERR ){ break; } if( nIndex1 >= i ){ if( i == 0 ){ i = List_SetCurSel( hwndResList, 0 ); }else{ i = List_SetCurSel( hwndResList, i - 1 ); } }else{ i = List_SetCurSel( hwndResList, nIndex1 ); } break; case IDC_BUTTON_INSERT: nIndex1 = List_GetCurSel( hwndResList ); if( LB_ERR == nIndex1 ){ // break; nIndex1 = 0; } nIndex2 = List_GetCurSel( hwndFuncList ); if( LB_ERR == nIndex2 ){ break; } i = List_GetItemData( hwndFuncList, nIndex2 ); // From Here Apr. 13, 2002 genta nIndex1 = ::Listbox_INSERTDATA( hwndResList, nIndex1, i ); if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){ break; } // To Here Apr. 13, 2002 genta List_SetCurSel( hwndResList, nIndex1 + 1 ); break; case IDC_BUTTON_ADD: nIndex1 = List_GetCount( hwndResList ); nIndex2 = List_GetCurSel( hwndFuncList ); if( LB_ERR == nIndex2 ){ break; } i = List_GetItemData( hwndFuncList, nIndex2 ); // From Here Apr. 13, 2002 genta // ここでは i != 0 だとは思うけど、一応保険です。 nIndex1 = ::Listbox_INSERTDATA( hwndResList, nIndex1, i ); if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){ TopErrorMessage( NULL, LS(STR_PROPCOMTOOL_ERR05), nIndex1 ); break; } // To Here Apr. 13, 2002 genta List_SetCurSel( hwndResList, nIndex1 ); break; case IDC_BUTTON_UP: nIndex1 = List_GetCurSel( hwndResList ); if( LB_ERR == nIndex1 || 0 >= nIndex1 ){ break; } i = List_GetItemData( hwndResList, nIndex1 ); j = List_DeleteString( hwndResList, nIndex1 ); if( j == LB_ERR ){ break; } // From Here Apr. 13, 2002 genta nIndex1 = ::Listbox_INSERTDATA( hwndResList, nIndex1 - 1, i ); if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){ TopErrorMessage( NULL, LS(STR_PROPCOMTOOL_ERR05), nIndex1 ); break; } // To Here Apr. 13, 2002 genta List_SetCurSel( hwndResList, nIndex1 ); break; case IDC_BUTTON_DOWN: i = List_GetCount( hwndResList ); nIndex1 = List_GetCurSel( hwndResList ); if( LB_ERR == nIndex1 || nIndex1 + 1 >= i ){ break; } i = List_GetItemData( hwndResList, nIndex1 ); j = List_DeleteString( hwndResList, nIndex1 ); if( j == LB_ERR ){ break; } // From Here Apr. 13, 2002 genta nIndex1 = ::Listbox_INSERTDATA( hwndResList, nIndex1 + 1, i ); if( nIndex1 == LB_ERR || nIndex1 == LB_ERRSPACE ){ TopErrorMessage( NULL, LS(STR_PROPCOMTOOL_ERR05), nIndex1 ); break; } List_SetCurSel( hwndResList, nIndex1 ); // To Here Apr. 13, 2002 genta break; } break; } } break; case WM_TIMER: SetDlgItemsEnableState( hwndDlg, hwndResList, hwndFuncList ); break; case WM_DESTROY: ::KillTimer( hwndDlg, 1 ); break; //@@@ 2001.02.04 Start by MIK: Popup Help case WM_HELP: { HELPINFO *p = (HELPINFO *)lParam; MyWinHelp( (HWND)p->hItemHandle, HELP_WM_HELP, (ULONG_PTR)(LPVOID)p_helpids ); // 2006.10.10 ryoji MyWinHelpに変更に変更 } return TRUE; /*NOTREACHED*/ //break; //@@@ 2001.02.04 End //@@@ 2001.12.22 Start by MIK: Context Menu Help //Context Menu case WM_CONTEXTMENU: MyWinHelp( hwndDlg, HELP_CONTEXTMENU, (ULONG_PTR)(LPVOID)p_helpids ); // 2006.10.10 ryoji MyWinHelpに変更に変更 return TRUE; //@@@ 2001.12.22 End } return FALSE; }