• 締切済み

HWNDについて

初歩的な質問です。 VC++のMFCアプリケーションWIZでアプリを作成しているのですが、 ウィンドウハンドルをどのように取得すればよろしいのでしょうか? まったくの初心者でHWNDをグレーのまま使用しているので。 よろしくお願い致します。

みんなの回答

  • osaosa42
  • ベストアンサー率60% (20/33)
回答No.2

CWndのメンバ「m_hWnd」がウィンドウハンドルです。

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.1

 取得??  今、貴方が使用しているHWNDの方法と、使用方法を補足して下さい。  過去に何度か出て来ていますが、この当りのハンドルは、複雑ですので、全部説明するのは不可能に近いので、間違いを指摘する方法で回答したいと思います。  どうしても全部教えてくれぇって事なら、書籍を購入して読むことをお薦めします。その方が何倍も有意義だと思います。

yomogikun
質問者

補足

説明不足でした。申し訳ありません。 補足説明をさせていただきますと、MFCアプリWIZで時計を作っており、 針をBitmapで描画したいわけです。 初心者でして、ネット上のサンプルソース等を参考に実装しているのですが、 サンプルソース BOOL InitDIB(HWND hWnd) { HDC hDC; BITMAPINFOHEADER bi; bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = 256; bi.biHeight = -256; //top-down bi.biPlanes = 1; bi.biBitCount = 32; bi.biCompression = BI_RGB; bi.biSizeImage = 0; bi.biXPelsPerMeter = 0; bi.biYPelsPerMeter = 0; bi.biClrUsed = 0; bi.biClrImportant = 0; hDC = GetDC(hWnd); hBmp = CreateDIBSection(hDC, (LPBITMAPINFO)&bi, DIB_RGB_COLORS, (void **)(&buf), NULL, 0); if(!hBmp) return FALSE; memDC = CreateCompatibleDC(hDC); SelectObject(memDC, hBmp); ReleaseDC(hWnd, hDC); return TRUE; } を流用したい時に、そういえばウィンドウハンドルってMFCアプリで どのように扱えばいいのかなと疑問に思い、質問させていただきました。 基本のところだと思うのですが、早急に機能実現をしないといけない 状況でして、自己解決に限界を感じました。 よろしくお願いいたします。

関連するQ&A

  • デバイスコンテキストについて

    いつもお世話になります。 MFCアプリケーションWIZでデスクトップアプリを作成しているのですが、 HDC型のデバイスコンテキストの取得方法がわかりません。 CWndのメンバ変数m_hWndにウィンドウハンドルが格納されるというのは わかったのですが、 hDC = GetDC(m_hWnd)だと間違っているのですよねー。 ご教示よろしくお願い致します。

  • Wordでウィンドウハンドル(Hwnd)を取得したい

    Word2007、2002を使用しています。 Wordでウィンドウハンドル(Hwnd)を取得したいと思ったのですが、 どのように取得して良いかわかりませんでした。 Excelであれば以下のように取得できました。  Excel.Application.Hwnd どのようなプログラムを書けばHwndは取得できますでしょうか? 私なりに調べてみたのですが、うまく見付けられませんでした。 もしご存知でしたら、ご教示お願いいたします。

  • VC++コンソールアプリでのインスタンスハンドルの取得

    VC++コンソールアプリでのインスタンスハンドルの取得 VC++コンソールアプリケーションでインスタンスハンドルを取得しようとしているのですが、 HINSTANCE hi = (HINSTANCE)GetWindowLong(HWND_DESKTOP, GWL_HINSTANCE); を実行すると、NULLが戻ってきます。 どこかまずい部分があるのでしょうか。 なお、第一引数のウィンドウハンドルは不明なため、 いくつかのWebサイトに習い、HWND_DESKTOPを指定しました。

  • ウィンドウのハンドルが分からない

     VC++2005ExpressEditionを使用しています.  「ファイル」->「新規作成」->「プロジェクト」->「CLR」->「Windowsフォームアプリケーション」とすると,ただの四角いフォームが作成されます.このフォームにボタンやテキストボックスを配置していくわけですが,このフォームの「ウィンドウのハンドル」を取得するのはどうすればいいのでしょうか.そもそも,このフォームに「ウィンドウのハンドル」というものは存在するのでしょうか.  呼び出したいWindowsAPI(WSAAsyncSelect)の引数の中に「ウィンドウのハンドル」というものがあって困っています.参考書のサンプルプログラムには「HWND hWnd」などと書いてあるのですが,VC++が作成したファイルの中を検索しても「HWND」という文字列はヒットしませんでした.

  • ウィンドウハンドルの取得方法について

    よろしくお願いします。 WIN98 VC++6.0 MFC にて 色々勉強しておりますが、今だにウィンドウハンドルの取得方法が良く分かりません。 SDKのサンプルを見ると、なるほどそうするのか。と思いますが、MFCになると分からなくなります。 たとえば、 ウィザードのデフォルトに従いダイアログベースでのプロジェクトを作成し、ボタン1と2を配置します。 以下のコードでボタン1を非表示にできます。 void CPppDlg::OnButton2() { CWnd* pButton1 = GetDlgItem (IDC_BUTTON1); pButton1->ShowWindow(SW_HIDE); } このコードにおいて、 1.SDKの BOOL ShowWindow( HWND hWnd, // handle to window int nCmdShow // show state of window ); を用いて引数が2個の形式に書きかえることは可能でしょうか? 2.可能であれば、具体的にはどう記述すれば良いのでしょうか?

  • visualstudioについて

    visualstudio2008 c++でアプリケーションを作っているのですが, 画像のようなアプリケーションを起動させ, HWND hWnd = ::FindWindow(NULL,"D:\アプリケーション.exe"); ::SendMessage(hWnd,WM_SETFOCUS,0,0); としたのですが,ウィンドウハンドルを取得できていないみたいで,SendMessageが働いていません. また,HWND hWnd = ::FindWindow(NULL,"D:\アプリケーション.exe");の行のところで warning C4129: '' :とエラーがでているのですがどうしてでしょうか? 一応"D:\\アプリケーション.exe"と変えれば警告は消えます. よろしくお願いします.

  • 画像操作について

    いつもお世話になります。 MFCベースでCreateDIBSectionの使い方を教えていただけないでしょうか? ビットマップ画像を回転させようとしているのですが、 MFCベースで作りこんでいるため、ウィンドウハンドルの 扱い方などがよくわかりません。 MFCベースだと再度HWNDとして取得する必要があるのでしょうか? それかキャストしないといけないのでしょうか? どなたかご教示おねがいいたします。

  • コンソールアプリケーションでのWIN32 APIメッセージ処理

    コンソールアプリケーションでのWIN32 APIメッセージ処理 VisualStdio.NET 2005のC++で作成しているコンソールアプリケーションで、 PostMessageでメッセージを送信しているのに、PeekMessageで検出できません。 下のプログラムに誤った点があるのでしょうか? 尚、ウィンドウハンドルの確認部分はパスしますが、 PostMessageとPeekMessageの引数hWndをNULLに置き換えるとメッセージの検出はできるので、 やはり、ウィンドウハンドルに問題があるのかもしれません。 #include <windows.h> #include <stdio.h> void main( void ) {   char OldTitle[1024], NewTitle[1024];   char WindowText[1024], ConsoleTitle[1024];   HWND hWnd;   MSG Msg;   /*** ウィンドウハンドルの取得 ***/   GetConsoleTitle( OldTitle, 1024 );   wsprintf( NewTitle, "%d/%d", GetTickCount(), GetCurrentProcessId());   SetConsoleTitle( NewTitle );   Sleep(40);   hWnd = FindWindow( NULL, NewTitle );   SetConsoleTitle( OldTitle );   /*** ウィンドウハンドルの確認 ***/   GetWindowText( hWnd, WindowText, 1024 );   GetConsoleTitle( ConsoleTitle, 1024 );   if ( strcmp( WindowText, ConsoleTitle ) != 0 ){     printf( "ウィンドウハンドルが不正です" );     return;   }   /*** メッセージの送信と検出 ***/   PostMessage( hWnd, 1050, 0, 0 );   do{     while ( PeekMessage( &Msg, hWnd, 0, 0, PM_REMOVE )){       printf( "メッセージを検出しました" );       return;     }   } while( 1 ); }

  • 【C#】FindWindowExの使い方を教えてください

    はじめまして Visual Studio 2005を使用しています。 C#.NETは、いじり初めて1週間の超初心者です。 C#.NETでのFindWindowExの使い方を教えてください。 まずはじめに、vb.netで作ったアプリAの"Form1"があり、その中にテキストボックス"TextBox1"があります。 "TextBox1"のテキスト(キャプション?)には同じく"TextBox1"と入力されています。 そこで、C#側のアプリBでVBのアプリAの"Form1"のハンドルをFindWindowで取得します。 ここまでは出来ました。 次に、FindWindowExを使って"TextBox1"のハンドルを取得したいのですが、どうしてもうまく取得できません(0が返ってきます) 以下、C#のソースです。 (textBox1のMultilineはTrueです) ================================================================== using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsApplication1 { public partial class Form1 : Form { [DllImport("user32.dll")] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] static extern IntPtr FindWindowEx(IntPtr hWnd, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); public IntPtr hWnd = (IntPtr)0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { IntPtr hWnd; IntPtr hWndTest; string sClassName = null; string sWindowText = "AppA"; // アプリAのウインドウハンドルを取得 hWnd = FindWindow(sClassName, sWindowText); textBox1.Text = "ウインドウのハンドル " + hWnd + "\r\n"; // アプリAのウインドウ内のTextBox1のハンドルを取得 hWndTest = hWnd; sClassName = null; sWindowText = "TextBox1"; hWnd = FindWindowEx(hWndTest, IntPtr.Zero, sClassName, sWindowText); textBox1.Text += "テキストボックスのハンドル " + hWnd; } } } ================================================================== Spy++で覗くとテキストボックスにもハンドルが割り与えられているので取得できるはずだと思っているのですが、どうしてもいまくいきません。 どうか、よろしくご享受願います。 ちなみに、アプリAのテキストボックスのクラス名が”WindowsForms10.EDIT.app.0.378734a”となっているのですが、これはどの環境でビルド(コンパイル)しても不変なのでしょうか? 不変だとしたら、クラス名を使えば悩まずに取得できると思うのですが・・・(実験済み)

  • 【MFC】Version情報の取得

    MFCでアプリケーションを作成しています。 リソースビュー⇒「Version」⇒「VS_VERSION_INFO」の、 キー「FILEVERSION」の値を取得するにはどのように実装すれば良いのでしょうか? ご存知の方おられましたら、ご教授お願い致します。 開発環境はVC++2005です。