• ベストアンサー

ウインドウサイズについて

起動時のウインドウサイズは以下で指定することが出来ますが、タイマーなどを使って、例えば起動後1分後にサイズを変えることは出来ますか? <VC++6.0 MFCにて> BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: この位置で CREATESTRUCT cs を修正して、Window クラスやスタイルを // 修正してください。 // ウィンドウの左上が X軸200,Y軸100の場所に指定 cs.x = 200; cs.y = 100; // ウィンドウのサイズを、幅500,高さ300に指定 cs.cx = 500; cs.cy = 300; return TRUE; }

  • mk1234
  • お礼率94% (1832/1940)

質問者が選んだベストアンサー

  • ベストアンサー
  • 405
  • ベストアンサー率50% (17/34)
回答No.4

void CABCView::OnLButtonUp(UINT nFlags, CPoint point) { AfxGetMainWnd()->SetWindowPos(NULL,aaa,bbb,ccc,ddd,SWP_SHOWWINDOW); CView::OnLButtonUp(nFlags, point); } では、期待する結果では無いですか?

mk1234
質問者

お礼

100%期待通りです。 勉強の甲斐有って、最近ようやく教えていただいたことの意味は分かるようになりましたが、まだまだ具体的なコードを自力では書けません。 また一歩前進できたと思います。 有難うございました。今後ともよろしくお願いいたします。

その他の回答 (3)

回答No.3

> SetWindowPosを使って再描画し、メインウインドウの > サイズを変えるためには具体的にどのようなコードを > 書けば良いのでしょう? (クライアント領域ではなく)メインウィンドウに対してSetWindowPosします。

mk1234
質問者

お礼

回答ありがとうございます。 まだまだ分からないことだらけの初心者です。 今回の件が分かれば、また一歩前進できると思います。 >(クライアント領域ではなく)メインウィンドウに対して >SetWindowPosします。 恥ずかしながらどのようにすれば良いのか分かりません。 ご教授ください。 以下は私が犯したまちがいコードです。 void CABCView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください CRect rect; GetWindowRect(&rect); SetWindowPos(&wndTop, aaa, bbb, ccc, ddd,SWP_SHOWWINDOW); CView::OnLButtonDown(nFlags, point); }

  • 405
  • ベストアンサー率50% (17/34)
回答No.2

SetWindowPos で、新しい幅・高さを設定できますが、使えませんか?

mk1234
質問者

お礼

回答ありがとうございます。 当方初心者です。タイマーの使い方は分かります。 話を簡単にするために、左クリックしたときに SetWindowPosを使って再描画し、メインウインドウのサイズを変えるためには具体的にどのようなコードを書けば良いのでしょう? 適当な見本を探して、一応自分でやってみましたが、クライアント領域は変わりましたが、フレームのサイズが変わりませんでした。 よろしくお願いいたします。

回答No.1

できます。タイマーを起動し、そのタイムアウト・メッセージを捕まえてください。

mk1234
質問者

お礼

回答ありがとうございます。

関連するQ&A

  • フレームのデフォルトのサイズについて

    また気になることが出てきましたので、よろしくお願いします。 VC++6.0 MFC MDIにて フレーム(親ウィンドウ)のサイズは、MainFrm.cpp内の以下にて変更することができますが、変更しないときは、デフォルトのサイズのウィンドウが生成されます。 そのデフォルトのサイズは、rectDefaultで定義されてるらしいということまでは調べたのですが、具体的にはどこでどのように定義されているのでしょうか? ご存知の方、よろしくお願いします。 ************************** BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CMDIFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: この位置で CREATESTRUCT cs を修正して、Window クラスやスタイルを // 修正してください。 return TRUE; }

  • タスクバーに非表示

    SDKではCreateWindowEXを使えば WS_EX_TOOLWINDOWを指定することでタスクバー上に非表示にすることができましたが、 MFCで BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)で cs.dwExStyle |= WS_EX_TOOLWINDOWとしたところ、 最大化、最小化ボタンが消えてしまいます。 最大化最小化ボタンをつけて、かつタスクバーに表示させたくないのですが どうすれば良いでしょうか?

  • ウィンドウのサイズについて

    環境はVC2005です。 ウィンドウの最大のサイズのX、Yの定数はありますでしょうか?

  • 【EXCEL 初・中級】 グラフのサイズを指定して変えたい

    1つのシートに複数のグラフを作成したのですが、プロットエリアのサイズ(X軸、Y軸の長さ)が違うのでそろえたいと思っています。外枠をドラック&ドロップすると変えれると思うのですが手動の為どうしても微妙な誤差が発生します。X軸、Y軸のサイズを数値で指定して変更する事は出来ないのでしょうか?分かる方ご教授願います。 EXCEL2000です。

  • ウインドウのサイズ変更

    すみません、VB初心者です。 Accsee VBAで作られたプログラムを修正しています。 今、ウインドウのサイズが最大化されているようなので、 サイズを変更したいのですが、 Form_Open()のところで、 DoCmd.MoveSize()をCallしてサイズを指定しているのですが、 も最大化されたままなのです。他に何か設定があるのでしょうか。 画面としてはフォームにさらにサブフォームを表示していて(意味わかりますか?) フォームも元から作ってあってほとんど修正はしていません。 よろしくお願い致します。

  • 別ウィンドウをそれぞれ違うサイズで位置指定で開きたい

    現在ウェブサイトを作っておりまして、別ウィンドウをそれぞれ違うサイズで位置指定で開きたいと思い、headの中に以下の記述をしました。 <SCRIPT language="JavaScript"> <!-- w = 800; h = 600; function season2009ss() { x = (screen.width - w) / 2; y = (screen.height - h) / 2; subWin = window.open("look/season2009ss.html","season2009ss","screenX="+x+",screenY="+y+",left="+x+",top="+y+",width="+w+",height="+h+",scrollbars=yes"); } //--> </SCRIPT> <SCRIPT language="JavaScript"> <!-- w = 500; h = 660; function contact() { x = (screen.width - w) / 2; y = (screen.height - h) / 2; subWin = window.open("mail/contact.html","contact","screenX="+x+",screenY="+y+",left="+x+",top="+y+",width="+w+",height="+h+",scrollbars=yes"); } //--> </SCRIPT> 開きたい画面は二つあり、位置は両ウィンドウとも画面の真ん中で、サイズのみ違います。 しかし、この形ですとなぜかウィンドウサイズは両方とも同じになってしまい、狙い通りにいきません。 何が原因なのでしょうか。

  • Dreamweaverのウィンドウサイズ

    Macromedia Dreamweaver4J (4.01)を使用しています。 編集ウィンドウのサイズについてなのですが、 なぜか543x402という変なサイズで開いてしまいます。 以前は「前回終了時」のサイズを記憶していて、 次回起動時にはそのサイズで開くようになってたと 思うのですが、いつのまにか… 起動時だけならまだしも、 新しいウィンドウを出すたびにそのサイズになるので、 その都度希望のサイズに変更をする必要があり、面倒です。 どうやったら直るのでしょうか?ご教示願います。

    • ベストアンサー
    • CSS
  • ウィンドウサイズを変更しても、サイズが描画されない。

    小生、只今C言語とWin32APIでアプリを作成しています。 そこで質問なのですが、以下のコードを実行しても、 ウィンドウにウィンドウサイズが描画されません。 例 幅0 : 高さ0 と描画され、ウィンドウのサイズを変更しても、 幅、高さどちらとも、0のままです。 どうか、お分かりになる諸先輩方、ご教授の方宜しくお願いします。 ※尚、文字数の関係もある為、多少削ってあります。 #include <windows.h> #define BUFSIZ 1024 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE, LPCSTR); BOOL InitInstance(HINSTANCE, int, LPCSTR); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; LPCSTR szClassName = "WindowSizeAndOneButton"; if(!InitApp(hCurInst, szClassName)){ return FALSE; } if(!InitInstance(hCurInst, nCmdShow, szClassName)){ return FALSE; } while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){ if(bRet == -1){ MessageBox(NULL, "GetMessage Error", "Error", MB_OK); break; } else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } ATOM InitApp(HINSTANCE hInst, LPCSTR szClassName) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } BOOL InitInstance(HINSTANCE hInst, int nCmdShow, LPCSTR szClassName) { HWND hWnd; hWnd = CreateWindow( szClassName, "Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd){ return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { HDC hdc; PAINTSTRUCT ps; static int width, height; static TCHAR buf[BUFSIZ]; width = height = 0; switch(msg){ case WM_DESTROY: PostQuitMessage(0); return 0; case WM_SIZE: width = LOWORD(lp); height = HIWORD(lp); return 0; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); wsprintf(buf, "幅 = %d : 高さ = %d", width, height); TextOut(hdc, 10, 10, buf, lstrlen(buf)); EndPaint(hWnd, &ps); } return DefWindowProc(hWnd, msg, wp, lp); }

  • 3点を通る放物線の求め方を教えてください。

    3点を通る放物線の求め方を教えてください。 (x1,y1), (x2,y2), (x3,y3)をこの順番で通り、頂点を(x2,y2)とする放物線を考えます。 3点が直線上になければ、ただ一つの放物線が定まると思います。 x=x2 を対称軸と仮定すれば、 a(x-x2)^2+y-y2=0 が放物線の式になります。 回転を考慮し、c^2+s^2=1 の変数を加えて書きなおせば、 a(cx-sy-cx2+sy2)^2+sx+cy-sx2-cy2=0 となりますが、X=x-x2, Y=y-y2 と置けば、 a(cX-sY)^2+sX+cY=0 となります。 この先、x1, y1 などを代入し、連立方程式にして解けば…と思いましたが上手くいきませんでした。

  • エクスプローラのウインドウサイズ固定

    Windows XPを使っています。 エクスプローラは最後に閉じた時のウインドウサイズを記憶していて、次回起動時に同じサイズにするはず なんですが、あるPCのみエクスプローラを起動した後、ウインドウサイズを変更せず、任意のフォルダを3箇所 くらい順に開いてから閉じると、なぜか次回起動した時に800x600のサイズに初期化されてしまいます。 フォルダを開かずに閉じた場合は記憶するようです。 [ctrl]を押しながら閉じる方法でも同様でしたし、ポリシーのNoSaveSettingsという名前のDWORD値もありませんでした。 普通の環境のようにウインドウサイズを記憶させる、または、デフォルトの800x600を変更する方法が ありましたらご回答よろしくお願いします。

専門家に質問してみよう