(setlocale 自体は早くから知ってたけど引数を "" にするとOSデフォルトになることに気づかず 2日ぐらいずっと悩んでました。(笑))
BOOL CMyDialogBase::OnInitDialog()
{
CDialog::OnInitDialog();
TC_ITEM tc;
tc.mask = TCIF_TEXT;
tc.pszText = "2次元表示操作パネル";
m_tab.InsertItem(0, &tc); // m_tab はTabctrl
m_pDlgPP2D = new CDialog;
m_pDlgPP2D->Create(IDD_PP2D, this);
m_pDlgPP2D->ShowWindow(SW_SHOW);
m_pDlgPP2D->SetWindowPos(...);
tc.pszText = "3次元表示操作パネル";
m_tab.InsertItem(1, &tc);
m_pDlgPP3D = new CDialog;
m_pDlgPP3D->Create(IDD_PP3D, this);
m_pDlgPP3D->ShowWindow(SW_HIDE);
m_pDlgPP3D->SetWindowPos(...);
return TRUE;
}
// Tab Ctrl の選択が変わったら
void CDlgViewCtrl::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
switch (m_tab.GetCurSel())
{
case 0:
m_pDlgPP2D->ShowWindow(SW_SHOW);
m_pDlgPP3D->ShowWindow(SW_HIDE);
break;
case 1:
m_pDlgPP2D->ShowWindow(SW_HIDE);
m_pDlgPP3D->ShowWindow(SW_SHOW);
break;
}
*pResult = 0;
}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
pContext->m_pNewViewClass = RUNTIME_CLASS(CMainView);
m_pMainView = (CMainView*)CreateView(pContext, AFX_IDW_PANE_FIRST);
pContext->m_pNewViewClass = RUNTIME_CLASS(CSubView);
m_pSubView = (CSubView*)CreateView(pContext, AFX_IDW_PANE_FIRST+1);
return TRUE;
}
BOOL CMainFrame::ChangeView(CView* pNewView)
{
if(!pNewView)
return FALSE;
CView* pNowView = GetActiveView();
if(!pNowView)
return FALSE; //考えられないが
if(pNowView == pNewView)
return FALSE;
// Viewの子ウインドウIDの入換え
int nNowViewID = pNowView->GetDlgCtrlID();
int nNewViewID = pNewView->GetDlgCtrlID();
pNowView->SetDlgCtrlID(nNewViewID);
pNewView->SetDlgCtrlID(nNowViewID);
pNowView->ShowWindow(SW_HIDE); //いま表示されていのを消す
pNewView->ShowWindow(SW_SHOW); //指定のビューを表示する
SetActiveView(pNewView);
RecalcLayout(); //フレーム内の位置を再計算
return TRUE;
}
void CMainFrame::OnChView() // ビュー変更メッセージハンドラ
{
if (GetActiveView() == m_pMainView)
ChangeView(m_pSubView);
else
ChangeView(m_pMainView);
}
ダイアログエディタでリストコントロールを作る。(IDC_LISTCTRL)
class CMyDlg : public CDialog
BOOL CMyDlg::OnInitDialog()
{
CCtrlListEx m_ListCtrl;
...
};
{
m_ListCtrl.SubclassDlgItem(IDC_LISTCTRL, this);
CDialog::OnInitDialog();
...
return TRUE;
}