• ベストアンサー

SetWindowPosで、移動可能のフォーム

vb6.0で、拡大鏡のプログラムを作成しています。 このフォームを常に手前に表示するように作成したかったので、SetWindowPosを使用しました。 このフォームがタイトルバーをドラッグしたときに移動可能にするにはどのようにすればよいのでしょうか? SWP_NOMOVE=&H2&で、現在の位置を変更しない ということが出来るそうですが その逆に 「現在の位置を変更可能にする」 ということが出来ればいいのですが… よろしくお願いします。

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

  • ベストアンサー
回答No.1

SWP_NOMOVE というフラグは、 「そのウィンドウを動かせないようにする」 という意味ではありません。 本来、SetWindowPos は、ウィンドウの位置とサイズとZオーダーを すべて指定する必要がありますが、HWND_TOPMOST を指定したいだけで、 ウィンドウの位置とサイズは変える必要はない、などの場合に、 いちいち現在の位置とサイズを求めて指定するのはナンセンスなので、 「とりあえず位置は 0,0 を指定するけど無視してね」 というときに使います。 ウィンドウの移動可能/不可能には、SetWindowPos は無関係です。 特に何もしなければ、普通はタイトルバーをつまんで動かせるので、 動かせないということは「動かせなくする処理をわざわざ入れてある」 のだと思われます。

amikiho
質問者

お礼

この質問を投稿した直後、問題は別にあることに気がついて SetWindowPosのSWP_NOMOVE=&H2&に問題はないことがわかりました。 質問を削除したかったのですが、削除できず。。。 回答者様のおっしゃる通りでした。 ご回答有難うございました。

関連するQ&A

  • アクセス2010本体フォーム固定

    アクセス本体のフォームの大きさを固定したく、下記サイトを参考にし http://hatenachips.blog34.fc2.com/blog-entry-2.html SetWindowPos hWnd, HWND_TOP, 0, 0, 800, 600, SWP_NOMOVE 、としました。 これを解除してフォームの大きさを変更できるようにするには、どうしたらよろしいでしょうか?

  • フォームのサイズを変更したいです。

    フォームビューにて、 void CProject2View::OnBnClickedButton1() { this->SetWindowPos(&wndTop,0,0,100,100,SWP_NOMOVE); } とすると、スクロールバーが表示されるだけです。 タイトルのことをするにはどうすればいいですか? よろしくお願いします。

  • タイトルバーやメニューバーの高さ取得

    サイズ変更可能なダイアログ ボックスアプリケーションを作っています ダイアログサイズ変更時に GetClientRect( m_DlgSize ); のようにしてサイズを取得し、設定ファイルにm_DlgSizeを保存します 次回起動時にInitDialog()で SetWindowPos( NULL, 0, 0, m_DlgSize.Width(),m_DlgSize.Height() ,SWP_NOMOVE); のように復元しました。 幅はきちんと復元できたんですけど高さが小さくなってしまいます。 どうやらGetClientRectではメニューバーやタイトルバーの高さを含めない座標を返し、 SetWindowPosではそれらも含めてサイズを設定してしまうようです この差を埋めるためにメニューバーやタイトルバーの高さを取得する方法がわかりません。 何か良い方法があったらご教授願います。 環境はVC++6.0 MFCです。

  • VB.NETのフォームの最大化について

    VB.NETのフォームを最大化できないようにする方法はないでしょうか? 常に同じ大きさにしたいのですが、タイトルバーをダブルクリックすると最大化してしまいます。

  • SetWindowPosについて

    こんにちは。以前のスレッドを何件か拝見して、私の事象がないようなので、投稿します。背面フォーム内の処理をタイマ割込みやループなどで処理しつつ、その前面でフォームを表示する場合、SetWindowPosのAPIが有効というところまでは分かっているのですが、私の場合、割り込みによるビットのON/OFFをしたいと思ってロジックを組んでいるのですが・・・ どうしてもモーダルフォームを前面表示したときと同じように、背面での処理が走ってくれません・・・ ロジックですが、前面フォームのイベントを sub Form_Load() SetWindowPos(frm_ctrl.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) end sub のように行っています。アンロード時にハンドルの設定は解除してあります。 タイマ割込みの処理が他者作成のため、目下処理が不明なのですが、こちらの方もAPIを使用しているかもしれません。 情報が少なくて恐縮ですが、この内容で解決の手掛かりとなる事をご教授頂けると幸いです。

  • Access2013のコマンドボタンを消す方法

    会社でAccessアプリケーションを作っています。 これまで、Access2003で作っていて、タイトルバーにある閉じるなどのコマンドボタンをモジュールで消していました。モジュールは、下記のような物です。 この度、会社のPCの交換で、Access2013にしたので、古いAccessをコンバートしたいと思いまして、不具合をつぶしているのですが、タイトルバーにあるコマンドボタンを非表示にすることができなくて悩んでいます。 どなたか、Access2013での方法を知っていましたら教えてください。 よろしくお願いします。 Access2003で使っているコードの一部です。 Public Function AccessTitleBar() Const GWL_STYLE = (-16) Const WS_SYSMENU = &H80000 Dim lngRetVal As Long lngRetVal = GetClassLongPtr(hWndAccessApp, GWL_STYLE) lngRetVal = SetWindowLongPt(hWndAccessApp, GWL_STYLE, lngRetVal - WS_SYSMENU) lngRetVal = SetWindowPos(hWndAccessApp, 0, 0, 0, 0, 0, _ SWP_DRAWFRAME Or SWP_NOZORDER Or SWP_NOMOVE Or SWP_NOSIZE) End Function

  • フォームの開く位置を揃えたい。

    フォームの開く位置の不揃いを改善する方法を知らないので、ご存じの方のご指導をお願いしたいと思います。 「フォームの設定」 フォームは全て「ポップアップ」設定にしています。 「改善したいこと」 コマンドボタンでフォームを開く時、フォーム毎に開く位置が違っていて違和感を感じています。開く位置をパソコン画面中央とかに揃える設定は可能でしょうか。 「実施していること」 フォームを修正した際、フォームを開く位置が極端にずれる時などは、フォームを中央にドラッグさせフォームの「タイトルバー」を「右クリック」し、表示されたメニューから「上書き保存」を選択し実行しています。 以上ですが、宜しくお願いします。

  • フォームが開けなくなりました

    VB6のsp6での質問です。開発環境はWinXP Proです。 作成中に、急に一つのフォームが開かなくなりました。 プロジェクトエクスプローラにはフォームやモジュールなどが表示されていますが、その一つをダブルクリックするとフォームが開かれますよね。それが、何も開かないフォームが出来てしまったんです。プログラムを実行すると、その見えないフォームもきちんと表示され、動かすことが出来ます。また、コードを表示することは出来ます。ただ画面が表示されないので、デザインの変更が出来ない状況です。 原因のお分かりになる方、よろしくお願いいたします。

  • ウインドウを常に前に、常にアクティブに、サイズコントロール可能で、親ウインドウから出ないようにしたいのですが・・・

    BCB5で、PhotoShopの情報パレットのような マウス位置などの情報を表示するパレットを作成しています。 前回、「フォームに自作のプロパティを作ることは可能でしょうか?」という質問で 中身の動作については実装できたのですが、 またそれ以外に問題がでてきました。 1.パレットが、常にメインのウインドウよりも手前になければならない。 2.メインがアクティブになったり、パレットがアクティブになったりすると、 タイトルバーの色が変わって見た目にうるさいので、なんとかしたい。 Photoshopでは、常に両方とも(タイトルバーが)アクティブの色になっているので、そのようにしたい。 3.パレットのサイズをユーザーが変更したときに、 パレットの中身のコンポーネントもその比率で拡大・縮小させたい。 4.ユーザーがパレットを移動させても、メインのウインドウから外にでないようにしたい。 メインウインドウの端まで来たら、そこで移動をストップさせたい。 以上です。 1に関しては、今現在、FormStyleプロパティで「fsStayOnTop」に指定していますが 他に何か方法がありますでしょうか? 1~4の全てでも、一つずつでもかまいませんので、 よろしければ教えてください。 よろしくおねがいします。

  • ドラッグを用いての拡大/縮小

    VB6.0により、プログラムの実行後、フォームウィンドウの端(角)をドラッグすることにより、(ボタンやボックスを含め)全体を拡大,縮小させることはできますでしょうか? フォームウィンドウの端からのドラッグはデフォルトでも出来るのですが、フォームウィンドウのみが拡大,縮小されてしまい,ボタンやボックスは元の大きさのままになってしまいます。 ご教授、お願いします。