//-------------------------------------------------------------------------------- // //【タイトルバーにあるボタンを制御】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// { HMENU hMenu ; // システムメニューのハンドルを取得 // hWndはメインウィンドウのウィンドウハンドル hMenu = GetSystemMenu(hWnd, FALSE) ; // クローズを無効化 EnableMenuItem(hMenu, SC_CLOSE, MF_DISABLED) ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// { // システムメニューのハンドルを取得 CMenu* pMenu = AfxGetMainWnd()->GetSystemMenu(FALSE) ; // クローズを無効化 pMenu->EnableMenuItem(SC_CLOSE, MF_DISABLED) ; }
//-------------------------------------------------------------------------------- // //【ウィンドウサイズをCFormViewの大きさに合わせる】 // //(MFC) ///////////////////////////////////////////////////////////////////////////// // クラスウイザードで追加された関数 void CTestFormView::OnInitialUpdate() { CFormView::OnInitialUpdate() ; GetParentFrame()->RecalcLayout() ; ResizeParentToFit() ; }
//-------------------------------------------------------------------------------- // //【通常のウィンドウでもTABキーでコントロールを移動する】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// // WinMain内のメッセージループ { MSG msg ; while(GetMessage(&msg, (HWND)NULL, 0, 0)){ // hWndは目的のウィンドウのウィンドウハンドル if(!IsDialogMessage(&msg)){ TranslateMessage(&msg) ; DispatchMessage(&msg) ; } } } //(MFC) ///////////////////////////////////////////////////////////////////////////// // クラスウィザードで追加された関数 BOOL CTestWnd::PreTranslateMessage(MSG* pMsg) { if(IsDialogMessage(pMsg)) return TRUE ; return CWnd::PreTranslateMessage(pMsg) ; }
//-------------------------------------------------------------------------------- // //【ウィンドウ幅(高さ)のリサイズ制御】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// // メインウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message){ case WM_GETMINMAXINFO : MINMAXINFO* lpMMI = (MINMAXINFO*)lParam ; lpMMI->ptMinTrackSize.x = 320 ; // 最小幅を320ドット lpMMI->ptMinTrackSize.y = 240 ; // 最小高を240ドット lpMMI->ptMaxTrackSize.x = 640 ; // 最大幅を640ドット lpMMI->ptMaxTrackSize.y = 480 ; // 最大高を480ドット return 0 ; default : return (DefWindowProc(hWnd, message, wParam, lParam)) ; } return 0 ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// // クラスウィザードで追加したWM_GETMINMAXINFOハンドラ void CTestWnd::OnGetMinMaxInfo(MINMAXINFO* lpMMI) { lpMMI->ptMinTrackSize.x = 320 ; // 最小幅を320ドット lpMMI->ptMinTrackSize.y = 240 ; // 最小高を240ドット lpMMI->ptMaxTrackSize.x = 640 ; // 最大幅を640ドット lpMMI->ptMaxTrackSize.y = 480 ; // 最大高を480ドット }
//-------------------------------------------------------------------------------- // //【前回のウィンドウ位置(サイズ)の復元】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// // メインウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message){ case WM_CREATE : RECT rcWindow ; // レジストリから前回のウィンドウ位置を取得 // SetRegistryKey()の引数はプログラマ固有の文字列にする SetRegistryKey("ComposerName\\TestApp") ; rcWindow.left = GetRegInt("Settings", "left", 0) ; rcWindow.top = GetRegInt("Settings", "top", 0) ; rcWindow.right = GetRegInt("Settings", "right", 200) ; rcWindow.bottom = GetRegInt("Settings", "bottom", 150) ; // ウィンドウ位置修正 MoveWindow(hWnd, rcWindow.left, rcWindow.top, rcWindow.right - rcWindow.left, rcWindow.bottom - rcWindow.top, FALSE) ; return 0 ; case WM_DESTROY : WINDOWPLACEMENT wndpl ; // ウィンドウ位置を取得 GetWindowPlacement(hWnd, &wndpl) ; // レジストリに保存 WriteRegInt("Settings", "left", wndpl.rcNormalPosition.left) ; WriteRegInt("Settings", "top", wndpl.rcNormalPosition.top) ; WriteRegInt("Settings", "right", wndpl.rcNormalPosition.right) ; WriteRegInt("Settings", "bottom", wndpl.rcNormalPosition.bottom) ; PostQuitMessage(0) ; break ; default : return (DefWindowProc(hWnd, message, wParam, lParam)) ; } return 0 ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// // WM_CREATEハンドラ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { : : // レジストリから前回のウィンドウ位置を取得 CWinApp* pApp = AfxGetApp() ; CRect rcWindow ; rcWindow.left = pApp->GetProfileInt("Settings", "left", 0) ; rcWindow.top = pApp->GetProfileInt("Settings", "top", 0) ; rcWindow.right = pApp->GetProfileInt("Settings", "right", 200) ; rcWindow.bottom = pApp->GetProfileInt("Settings", "bottom", 150) ; // ウィンドウ位置修正 MoveWindow(rcWindow) ; return 0 ; } ///////////////////////////////////////////////////////////////////////////// // クラスウィザードで追加したWM_DESTROYハンドラ void CMainFrame::OnDestroy() { WINDOWPLACEMENT wndpl ; // ウィンドウ位置を取得 GetWindowPlacement(&wndpl) ; // レジストリに保存 CWinApp* pApp = AfxGetApp() ; pApp->WriteProfileInt("Settings", "left", wndpl.rcNormalPosition.left) ; pApp->WriteProfileInt("Settings", "top", wndpl.rcNormalPosition.top) ; pApp->WriteProfileInt("Settings", "right", wndpl.rcNormalPosition.right) ; pApp->WriteProfileInt("Settings", "bottom", wndpl.rcNormalPosition.bottom) ; // スーパークラスのOnDestroy()を呼ぶ前に処理する CFrameWnd::OnDestroy() ; }
//-------------------------------------------------------------------------------- // //【ウィンドウ上からマウスが離れたことを検出】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// // ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message){ case WM_MOUSEMOVE : POINT point ; RECT rcWindow ; point.x = LOWORD(lParam) ; point.y = HIWORD(lParam) ; // g_bCaptureはキャプチャ中かを保持するBOOL型グローバル変数 if(g_bCapture == FALSE){ // マウスが自ウィンドウ内に入ってきたのでキャプチャ開始 SetCapture(hWnd) ; g_bCapture = TRUE ; //MessageBox(hWnd, "ウィンドウに入った", "", MB_OK); } // 自ウィンドウ位置を取得 GetWindowRect(hWnd, &rcWindow) ; ClientToScreen(hWnd, &point) ; // ウィンドウ位置とマウスポインタの比較 if(rcWindow.left > point.x || rcWindow.right < point.x || rcWindow.top > point.y || rcWindow.bottom < point.y){ // ウィンドウ内にマウスがない(離れた)のでキャプチャ解除 ReleaseCapture() ; g_bCapture = FALSE ; MessageBox(hWnd, "ウィンドウからマウスが離れた", "", MB_OK) ; } return 0 ; default : return (DefWindowProc(hWnd, message, wParam, lParam)) ; } return 0 ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// // クラスウィザードで追加したWM_MOUSEMOVEハンドラ void CTestWnd::OnMouseMove(UINT nFlags, CPoint point) { // m_bCaptureはキャプチャ中かを保持するBOOL型メンバ変数 if(m_bCapture == FALSE){ // マウスが自ウィンドウ内に入ってきたのでキャプチャ開始 SetCapture() ; m_bCapture = TRUE ; } CRect rcWindow ; // 自ウィンドウ位置を取得 GetWindowRect(rcWindow) ; ClientToScreen(&point) ; // ウィンドウ位置とマウスポインタの比較 if(rcWindow.PtInRect(point) == FALSE){ // ウィンドウ内にマウスがない(離れた)のでキャプチャ解除 ReleaseCapture() ; m_bCapture = FALSE ; MessageBox("ウィンドウからマウスが離れた") ; } CWnd::OnMouseMove(nFlags, point) ; }
//-------------------------------------------------------------------------------- // //【ウィンドウ上にマウスが来た時だけカーソルを変更】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// // ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message){ case WM_SETCURSOR : int nHittest = LOWORD(lParam) ; // クライアント領域の場合のみカーソルを変更 if(nHittest == HTCLIENT){ HCURSOR hCursor = LoadCursor(g_hInstance, MAKEINTRESOURCE(IDC_CURSOR)) ; SetCursor(hCursor) ; return 0 ; } break ; default : break ; } return (DefWindowProc(hWnd, message, wParam, lParam)) ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// // クラスウィザードで追加したWM_SETCURSORハンドラ BOOL CTestWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { // クライアント領域の場合のみカーソルを変更 if(nHitTest == HTCLIENT){ ::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR)) ; // スーパークラスのOnSetCursor()は呼び出さずに戻る return TRUE ; } return CWnd::OnSetCursor(pWnd, nHitTest, message) ; }
//-------------------------------------------------------------------------------- // //【デスクトップのサイズ取得】 // // 現在のデスクトップの大きさ(解像度ではなく、タスクバーなどを抜かした領域)を知りたい場合はGetSystemMetrics()を使用すれば良い。 //(SDK/MFC) ///////////////////////////////////////////////////////////////////////////// { int nDesktopWidth = GetSystemMetrics(SM_CXFULLSCREEN) ; int nDesktopHeight = GetSystemMetrics(SM_CYFULLSCREEN) ; } // また、現在の解像度を知りたい場合は以下のようにする。 //(SDK/MFC) ///////////////////////////////////////////////////////////////////////////// { int nScreenWidth = GetSystemMetrics(SM_CXSCREEN) ; int nScreenHeight = GetSystemMetrics(SM_CYSCREEN) ; }
//-------------------------------------------------------------------------------- // //【全てのウィンドウを取得】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// void OnTest(HWND hWnd) { // g_wndListBoxはリストボックスのウィンドウハンドル EnumWindows(EnumWndProc, (LPARAM)g_wndListBox) ; } ///////////////////////////////////////////////////////////////////////////// // EnumWindows()用のコールバック関数 // この関数はウィンドウの数だけ呼ばれる BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM lParam) { HWND hwndListBox = (HWND)lParam ; char szWindowName[128] ; char szClassName[128] ; char szText[256] ; WINDOWPLACEMENT wpl ; wpl.length = sizeof(WINDOWPLACEMENT); // 追加 // ウィンドウテキスト(キャプション)の取得 GetWindowText(hWnd, szWindowName, sizeof(szWindowName)) ; // ウィンドウクラス名の取得 GetClassName(hWnd, szClassName, sizeof(szWindowName)) ; // ウィンドウ位置の取得 GetWindowPlacement(hWnd, &wpl) ; // EnumWindows()ではIME等、不可視のウィンドウも全て列挙されるので // ふるいにかける必要がある if((IsWindowVisible(hWnd)) && // 可視状態か (GetWindow(hWnd, GW_OWNER) == NULL) && // トップレベルウィンドウか (lstrlen(szWindowName) > 0) && // キャプションを持っているか (lstrcmp(szClassName, "Progman") != 0)){ // シェルでないか // ウィンドウ位置の取得 GetWindowPlacement(hWnd, &wpl) ; // 取得した情報を文字列にする wsprintf(szText, "%s [ %s ] (%d, %d, %d, %d)", szWindowName, szClassName, wpl.rcNormalPosition.left, wpl.rcNormalPosition.top, wpl.rcNormalPosition.right, wpl.rcNormalPosition.bottom) ; // EnumWindows()実行側のリストボックスに文字列を追加 SendMessage(hwndListBox, LB_ADDSTRING, 0, (LPARAM)szText) ; } return TRUE ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// void CTestDialog::OnTest() { // m_wndListBoxはCListBox型のオブジェクト EnumWindows(EnumWndProc, (LPARAM)&m_wndListBox) ; } ///////////////////////////////////////////////////////////////////////////// // EnumWindows()用のコールバック関数 // この関数はウィンドウの数だけ呼ばれる BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM lParam) { CListBox* pList = (CListBox*)lParam ; char szWindowName[128] ; char szClassName[128] ; char szText[256] ; WINDOWPLACEMENT wpl ; wpl.length = sizeof(WINDOWPLACEMENT) ; // 追加 // ウィンドウテキスト(キャプション)の取得 GetWindowText(hWnd, szWindowName, sizeof(szWindowName)) ; // ウィンドウクラス名の取得 GetClassName(hWnd, szClassName, sizeof(szWindowName)) ; // EnumWindows()ではIME等、不可視のウィンドウも全て列挙されるので // ふるいにかける必要がある if((IsWindowVisible(hWnd)) && // 可視状態か (GetWindow(hWnd, GW_OWNER) == NULL) && // トップレベルウィンドウか (lstrlen(szWindowName) > 0) && // キャプションを持っているか (lstrcmp(szClassName, "Progman") != 0)){ // シェルでないか // ウィンドウ位置の取得 GetWindowPlacement(hWnd, &wpl) ; // 取得した情報を文字列にする wsprintf(szText, "%s [ %s ] (%d, %d, %d, %d)", szWindowName, szClassName, wpl.rcNormalPosition.left, wpl.rcNormalPosition.top, wpl.rcNormalPosition.right, wpl.rcNormalPosition.bottom) ; // EnumWindows()実行側のリストボックスに文字列を追加 pList->AddString(szText) ; } return TRUE ; }
//-------------------------------------------------------------------------------- // //【動的にウィンドウスタイルを変更する】 // // まず、現在のウィンドウスタイルから目的のスタイルを外したい場合は次のようにする。 //(SDK/MFC) ///////////////////////////////////////////////////////////////////////////// // ウィンドウスタイルを外す LONG ResetWindowStyle(HWND hWnd, LONG lStyle) { LONG lPrevStyle = GetWindowLong(hWnd, GWL_STYLE) ; // 指定したウィンドウスタイルを外す LONG lNewSytle = lPrevStyle & ~lStyle ; // 変更したウィンドウスタイルを設定 SetWindowLong(hWnd, GWL_STYLE, lNewSytle) ; return lNewSytle ; } // 次に、新たにウィンドウスタイルを設定したい場合は次のようにする。 ///////////////////////////////////////////////////////////////////////////// // ウィンドウスタイルを設定する LONG SetWindowStyle(HWND hWnd, LONG lStyle) { LONG lPrevStyle = GetWindowLong(hWnd, GWL_STYLE) ; // 新しいウィンドウスタイルをセット LONG lNewSytle = lPrevStyle | lStyle ; // 変更したウィンドウスタイルを設定 SetWindowLong(hWnd, GWL_STYLE, lNewSytle) ; return lNewSytle ; }
//-------------------------------------------------------------------------------- // //【クライアントサイズに合わせて親のサイズを決める】 //(SDK/MFC) ///////////////////////////////////////////////////////////////////////////// { // クライアント領域が320x240の大きさのウィンドウサイズを求める RECT rcWindow = { 0, 0, 320, 240 } ; // このウィンドウはWS_OVERLAPPEDWINDOWでメニューがついている AdjustWindowRect(&rcWindow, WS_OVERLAPPEDWINDOW, TRUE) ; // 求めたウィンドウサイズに変更 SetWindowPos( hWnd, HWND_TOP, -1, -1, rcWindow.right - rcWindow.left, rcWindow.bottom - rcWindow.top, SWP_NOMOVE) ; }
//-------------------------------------------------------------------------------- // //【非矩形ウィンドウの作成】 // //(MFC) ///////////////////////////////////////////////////////////////////////////// // WM_INITDIALOGハンドラ BOOL CTestDialog::OnInitDialog() { CDialog::OnInitDialog(); : : CRect rcWindow; GetWindowRect(rcWindow) ; // 四隅の丸いリージョンを作成(丸い角の幅、高さを100) // m_rgnはCRgn型のメンバ変数 m_rgn.CreateRoundRectRgn(0, 0, rcWindow.Width(), rcWindow.Height(), 100, 100) ; // リージョンの設定 SetWindowRgn(m_rgn, TRUE) ; return TRUE ; // TRUE を返すとコントロールに設定したフォーカスは失われません。 } ///////////////////////////////////////////////////////////////////////////// // クラスウィザードで追加したWM_NCHITTESTハンドラ UINT CTestDialog::OnNcHitTest(CPoint point) { // ウィンドウ上のどの位置にマウスポインタが来ても、「キャプション」 // と返すことにより、クライアント領域をドラッグしてウィンドウの移動が // できるようになる return HTCAPTION ; }
//-------------------------------------------------------------------------------- // //【WS_EX_CLIENTEDGE(3次元)の外し方】 // //(MFC) ///////////////////////////////////////////////////////////////////////////// BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { BOOL bResult = CFrameWnd::PreCreateWindow(cs) ; // ここでWS_EX_CLIENTEDGEを外す cs.dwExStyle &= ~WS_EX_CLIENTEDGE ; return bResult ; }
//-------------------------------------------------------------------------------- // //【最大化状態で起動】 // //(MFC) ///////////////////////////////////////////////////////////////////////////// BOOL CTestApp::InitInstance() { : : // コマンドライン処理が呼ばれる前に変更 // 最大化 m_nCmdShow = SW_MAXIMIZE ; // 最小化 // m_nCmdShow = SW_SHOWMINIMIZED ; // DDE、file open など標準のシェル コマンドのコマンドラインを解析します。 CCommandLineInfo cmdInfo ; ParseCommandLine(cmdInfo) ; : : // メイン ウィンドウが初期化されたので、表示と更新を行います。 //※ここでSW_MAXIMIZEすると最大化の様子が見えてしまう m_pMainWnd->ShowWindow(SW_SHOW) ; m_pMainWnd->UpdateWindow() ; return TRUE ; }
//-------------------------------------------------------------------------------- // //【リサイズの可/不可切り替え】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// // リサイズ可/不可切り替え void Resizeable(HWND hWnd, BOOL bResizeable) { DWORD dwRemove ; DWORD dwAdd ; // メインフレームのウィンドウスタイルを変更 if(bResizeable){ dwRemove = WS_OVERLAPPED ; dwAdd = WS_THICKFRAME ; } else{ dwRemove = WS_THICKFRAME ; dwAdd = WS_OVERLAPPED ; } ResetWindowStyle(hWnd, dwRemove) ; SetWindowStyle(hWnd, dwAdd) ; // ステータスバーを一旦隠す ShowWindow(g_hwndStatusBar, SW_HIDE) ; // ステータスバーの破棄 DestroyWindow(g_hwndStatusBar) ; // ステータスバーの作成 g_hwndStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE, "", hWnd, IDC_STATUSBAR) ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// // リサイズ可/不可切り替え void CMainFrame::Resizeable(BOOL bResizeable) { // メインフレームのウィンドウスタイルを変更 if(bResizeable) ModifyStyle(WS_OVERLAPPED, WS_THICKFRAME, 0) ; else ModifyStyle(WS_THICKFRAME, WS_OVERLAPPED, 0) ; // ステータスバーを一旦隠す ShowControlBar(&m_wndStatusBar, FALSE, FALSE) ; // ステータスバーの破棄 m_wndStatusBar.DestroyWindow() ; // ステータスバーの作成 m_wndStatusBar.Create(this) ; m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)) ; // ステータスバーを表示する ShowControlBar(&m_wndStatusBar, TRUE, FALSE) ; }
//-------------------------------------------------------------------------------- // //【アプリケーションを終了させる】 // // メインウィンドウにWM_CLOSEメッセージをポストすることによりアプリケーションを終了させる AfxGetMainWnd()->PostMessage(WM_CLOSE) ;
//-------------------------------------------------------------------------------- // //【タイトルバーにファイル名を出さないようにする】 // //メインフレームクラスのPreCreateWindow()をオーバーライドして CREATESTRUCT構造体のスタイルからFWS_ADDTOTITLEを除去します BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style &= ~FWS_ADDTOTITLE ; return CFrameWnd::PreCreateWindow(cs) ; }
//-------------------------------------------------------------------------------- // //【変則的な分割ウィンドウを作る】 // //左右、上下に規則的に分割したウィンドウを作成するには CSplitterWndクラスのCreateStatic()の一回だけでできますが、上下に分割していて更に下側だけ左右に分割しているような少し変則的な分割ウィンドウの作り方を説明します。 //(1) CMainFrameにCSplitterWndのメンバを2つ追加します。 CSplitterWnd m_wndSplitter1, m_wndSplitter2 ; //(2) CMainFrameのOnCreateClient()で以下の処理を行います。 { // 2行1列の分割ウィンドウを生成します if(!m_wndSplitter1.CreateStatic(this,2, 1)) return FALSE ; // 上のウィンドウの2行目を 1行2列に分割します if(!m_wndSplitter2.CreateStatic(&m_wndSplitter1, 1, 2, WS_CHILD | WS_VISIBLE , m_wndSplitter1.IdFromRowCol(0,0))) return FALSE ; // ウィンドウの行の高さを指定します m_wndSplitter1.SetRowInfo(0,400,10) ; m_wndSplitter1.SetRowInfo(1,100,10) ; // 上左側のビューを生成します(ここではビューのクラスをCEditViewにしています) if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CEditView), CSize(100,0), pContext)) return FALSE ; // 上右側のビューを生成します if(!m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(CEditView), CSize(100, 100), pContext)) return FALSE ; // 下側のビューを生成します if(!m_wndSplitter1.CreateView(1, 0, RUNTIME_CLASS(CEditView), CSize(400, 400), pContext)) return FALSE ; }
//-------------------------------------------------------------------------------- // //【ウィンドウを画面中央に配置する】 // //CWndクラスのCenterWindow()を使うと ウィンドウを(引数で指定されたウィンドウの)中央に 配置できます。 //また CWndクラスのGetDesktopWindow()を使うと デスクトップのウィンドウが取得できるので CenterWindow(GetDesktopWindow()) ; //で そのウィンドウを画面中央に配置できます。
//-------------------------------------------------------------------------------- // //【アプリケーションを常に最前面に配置する】 // //SetWindowPos()の第一引数に &wndTopMostを指定することにより ウィンドウを常に最前面に置くことができます。 //(アクティブでなくなっても 常に最前面のままです) AfxGetMainWnd()->SetWindowPos(&wndTopMost, 100, 100, 100, 100, 0) ;
//-------------------------------------------------------------------------------- // //【最大化ボタン、最小化ボタンをフレームウィンドウから取り除く】 // // PreCreateWindow()をオーバーライドして WS_MAXIMIZEBOX, WS_MINIMIZEBOXをCREATESTRUCT構造体のスタイルからはずします。 // 最大化ボタンをはずす。 cs.style ^= WS_MAXIMIZEBOX ; // 最小化ボタンをはずす。 cs.style ^= WS_MINIMIZEBOX ;