• 締切済み

スタティックコントロールのサイズを取得する

VC++.NET2005で勉強しています。 例えば、mainDlgのリソースで作った、staticコントロールのサイズを、subDlgのソースから取得する方法で悩んでいます。 すでに、staticコントロールにはクラスウィザードでメンバ変数は作っており、取得する方法自体は、GetClientRect(rect) 等で取得できることはわかっています。 どのクラスからでも、特定のクラスのコントロール識別子(ID)を取得したりする事は可能でしょうか。 ご存知の方、ご教授お願い致します。

みんなの回答

  • RAPTsong
  • ベストアンサー率42% (74/175)
回答No.1

ちょっと何がしたいのかよくわからなかったので、推測して回答します。 そのコントロールの ID を IDC_STATIC 以外にすればハンドルを取得できます。 逆に、ウィンドウハンドルが分かっていれば、GetDlgCtrlID() で ID が取得できます。

unlonghorn
質問者

お礼

早々のご返事有難うございます。 お礼が遅くなり申し訳ございません。 アドバイスを参考に解決する事ができました。 有難うございました。

関連するQ&A

  • VCでの問題・・・

    マッピングモードでつまづいてます。 SetMapMode(MM_LOENGLISH); CRect rect; GetClientRect(&rect); pDC->Ellipse(0,0,rect.right,-rect.bottom); とした場合、クライアント領域全体に楕円が表示されると思っていたのですが、右と下に余白があいてしまいます。 MM_TEXTだと思ったように表示されるのですが、MM_LOENGLISHだとGetClientRectでしっかりと領域を取得できていないようです。どうすればMM_LOENGLISHでしっかりとクライアント領域を取得できますか? まだ、VCはじめたばかりで分からないことだらけです。 どうかよろしくお願いします。

  • ASP.NETのCheckboxlistコントロールで取得した値をSQLデータソースコントロールに渡すにはどのようにしたらいいでしょうか??

    素人なのでうまく説明できないかもしれませんが、どうぞ宜しくお願い致します。 ASP.NETのCheckboxlistコントロールで取得した値をSQLデータソースコントロールに渡すにはどのようにしたらいいでしょうか?? 複数のチェックボックスリストを配置し、それぞれのチェックボックスリストで選択されているものに該当するもの、チェックしている条件全てを満たすものをデータベースから取得し、GridViewで表示したいのですが、どのようにコードの部分を書いたらいいのか見当がつきませんでしたので、詳しい方に教えていただけたらと思っておりました。 特に分からないのが、一つのチェックボックスリスト内で1つしか選択できないのであれば、その値をセッション変数に入れてデータソースコントロールに渡すことができるのですが、複数個を指定することができる状態だと複数のセッション変数に入れる事になり、その際にデータソースコントロールにデータを渡すとなるとどのようにしたらいいのかが分かりません。 と言っても現状で思いつく方法がこれ位で、詳しい方からすればもっと良い方法があるかもしれませんので、上記の事柄を行う良い方法があったら是非御教授いただけたらと思っております。 宜しくお願い致します。

  • privateのメンバ変数を直接取得するユーティリティ。

    privateのメンバ変数を直接取得するユーティリティ。 以前、あるプロジェクトでクラスのprivateメンバ変数をgetterメソッドがないのに直接取得できるクラスを使っているのを見ました。 オブジェクトとメンバ変数とかを引数に渡すと、Object型で返却されるようなテスト用のユーティリティクラスみたいでした。 クラスやパッケージなどを確認しなかったので、もしかしたらそのプロジェクトで独自に作ったのかもしれません。 ただオープンソースとかで存在するのであればテストに便利なので利用したいと考えています。 できればsetterメソッドがないprivateメンバ変数に設定できるクラスがあるとよいのですが・・・。 ご存知でしたら是非おしえてください。 希望している経緯はWebアプリケーションのクラスを作成すると、コンテナのオブジェクトがないと動かない場合も多く、単体試験がやりにくいのです。 easymockなど色々ありますが、生成したオブジェクトを対象クラスに渡してあげる必要があるものが多く(staticメソッドは対象外とか)、テストのためにsetterメソッドを実装する必要があります。 個人的には単体試験をやりやすくするために、本番では使用しないメソッドになるけれど、上記のようなsetterメソッドを作成するのはよいと考えています。 依存性を少なくさせて(意味が違うかもしれませんが)、試験がしやすくなれば保守性もあがるし、バグの発生率も少なくなると思っています。 ただ人によっては本番で動かないメソッドがあるのはおかしいという人もいます(実際に言われました)。 確かにそういう考えもあるかと思いますし、以前は私もそう思っていました。 試験のためのメソッドをクラスに作成する考えについても(主にテスト用なのでprotectedで作成しています)、やめた方がいいなどのアドバイスを頂けると嬉しいです。

    • ベストアンサー
    • Java
  • C# コントロール取得

    C# コントロール取得 選択しているコントロールを取得する方法とかありますでしょうか? VC#2008でアプリケーションを作っています。 例えばテキストボックスのLeave関数などで MessageBox.Show(this.textbox1.Text) みたいにしたいのですが テキストボックスが20個ぐらい必要だとLeave関数を20個作らなくてはいけないので 上記の方法がわかれば1つで済むので是非知りたいです。 自分でも調べてActiveControlを使用してみたのですが反応しません。 MessageBox.Show(this.ActiveControl.Text); としましたが・・ 教えてください

  • 参照型のオフセット取得

    C++でリフレクションを実装するため、全メンバー変数のオフセット をoffsetofで取得し、メンバ変数名とオフセットをstd::mapに登録 しようとしています。 ここで質問なのですが、参照型に対してoffsetofを取得しようとすると アクセス違反で落ちてしまいます。原因を調べてみると、クラスの オブジェクトがobj、メンバ変数が参照型refだとすると、&obj.refは ref変数のアドレスを返すのでは無く、refが指している変数のアドレス を返してくるのが原因でした。 長くなりましたが、ref変数のアドレスを取得する方法、またはオフセット を取得する方法は無いのでしょうか?これが出来ないと、参照型については未サポートにするしか無くなってしまいます><

  • MFC ダイアログ上のID取得について

    VC++6.0 MFC ダイアログベースで開発しています。 リソースエディタで配置したダイアログ上にある全てのコントロール(ボタン、テキスト等)IDを取得する方法はありませんか? よろしくお願いします。

  • CreateWindowでSTATICコントロールを使ってBITMAP表示する。

    WIN32、VC++2005にて開発中です。 CreateWindowでSTATICコントロールを使ってBITMAPを表示する方法が分からなくて困ってます。 ウィンドウプロシージャのWM_CREATEで、 下記の様に書いてみたんですがダメでした。 CreateWindowW(L"Static", L"***", WS_VISIBLE|WS_CHILD|SS_BITMAP,120, 3, 100, 45, hWnd, HMENU(-1), NULL, NULL); ビットマップはIDB_BITMAP1という名前で追加してリソースビューで確認しました。 CreateWindowで表示させたいんですがいい方法ありますか? 初心者でアホなんでなるべく解り易くお願いします。

  • Formにエディットボックスを貼りたい

    環境はWIN98 VC++6.0 MFC SDIです。 クラスウィザードのデフォルトでSDIを作ります。 但し、6/6ページの基本クラスはCFormViewにします。 このForm上にプログラム上からエディットボックスを貼りつけるために、以下のようにしましたが、エディットボックスらしき白い四角は出来ましたが文字の入力が出来ません。 どうすればよいのでしょうか? static contID = 4000; ///////////////////////////////////////////////// int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { 略   CRect rect;   // CTestWndの上にCEditを貼り付ける   rect.top = 30;   rect.left = 30;   rect.bottom = 100;   rect.right = 100;   CEdit* edit = new CEdit();      if( edit->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP,   rect,   this,   contID++ ) != TRUE ){     throw new CException();   }   return 0; }

  • 巨大アプリケーションの開発

    開発環境:VC++6.0, MFC 私はデスクトップアプリケーションを開発しています。 開発当初から、ウィザードを使用して"MFC AppWizard (exe)" プロジェクトをつくり、開発をつづけてきましたが、 ソースファイルが膨大になってきたので、プロジェクトで 管理するファイル(ソースファイル、リソースファイルなど) を整理したいと思っています。整理するにあたり次の2点を おこなう予定です。 1.ソースファイルを機能別のフォルダに分ける。 2.リソースファイルも機能別に複数のファイルに分割する。 ここで疑問があります。1と2をおこなった場合、VC++6.0 ではフォルダに分けられたソースファイルや複数のリソース ファイルを管理することができるのでしょうか?例えば、 a)ソースファイルをプロジェクトに追加する場合、 プロジェクトファイルが置いてあるフォルダよりも2・3層下 のフォルダ内にあるソースファイルでも追加可能か? b)メニューから新規にクラスを作成した場合、任意の フォルダ(新規クラスに該当する機能のフォルダ)に保存する ことが可能か? c)複数のリソースファイルをプロジェクトに追加し、 個々のリソースファイルを編集することができるか? d)クラスウィザードを使ってイベントの追加ができるか? a)~d)ができないのであれば、みなさんは巨大な アプリケーションを開発する場合どうしていますか? リソースファイルの編集以外は、VC++6.0を使わずに コマンドラインからコンパイルやリンクをおこなっている のですか?

  • コントロールでのフォーカスの取得

    WNDOWSXP + VC++2010Express + SDKです。VC++ExpressなのでMFCなどは使えません。 ウィンドウのフォーカスの取得方法について質問します。 メインウィンドウにコントロールを3つ貼り付けます。 エディットコントロール2つと、自分で作成したコントロールが1つです。 自分で作成したコントロールのウィンドウプロシージャは仮に↓こんなものだとします。 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if(message==WM_KEYDOWN) { if(wParam=='A'){ MessageBox(NULL,_T("A"),_T("KEYDOWN"),NULL); } return 0; } return DefWindowProc(hWnd, message, wParam, lParam); } プログラムを起動し、エディットコントロールAをクリックすると エディットコントロールAにフォーカスが移動します。 キーボードのAボタンを押下すると、エディットコントロールAに「a」と入力されます。 エディットコントロールB、自分で作成したコントロールは無反応です。 エディットコントロールBをクリックすると、エディットコントロールBにフォーカスが移動します。 キーボードのAボタンを押下すると、エディットコントロールBに「a」と入力されます。 エディットコントロールA、自分で作成したコントロールは無反応です。 次に、自分で作成したコントロールをクリックした場合、 フォーカスはエディットコントロールBにあります。キーイベントなども エディットコントロールBのみが反応します。 ここで、自分で作成したコントロールをクリックした場合に 自分で作成したコントロールがフォーカスを取得し、 キーイベントなどを独占的に受け取れるようにしたいのですが、方法がわかりません。 どなたか方法をご存知の方がいらっしゃいましたら、ご教授いただけないでしょうか。