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

A 回答 (2件)

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

    • good
    • 0

 取得??


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

この回答への補足

説明不足でした。申し訳ありません。
補足説明をさせていただきますと、MFCアプリWIZで時計を作っており、
針をBitmapで描画したいわけです。
初心者でして、ネット上のサンプルソース等を参考に実装しているのですが、

サンプルソース
BOOL InitDIB(HWND hWnd)
{
HDChDC;
BITMAPINFOHEADERbi;

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アプリで
どのように扱えばいいのかなと疑問に思い、質問させていただきました。
基本のところだと思うのですが、早急に機能実現をしないといけない
状況でして、自己解決に限界を感じました。
よろしくお願いいたします。

補足日時:2001/06/13 16:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q【VC++】MFC、C++/CLI(CLR)、C#の違い、及び、これからの展望

いつも大変お世話になっています。
VC++初心者です。

VC++6.0(MFC)、VC++2005(CLR)(C++/CLI)(Express Edition)を
同時期に使い始めて何ヶ月か経ちました。
現在では、CLIの方が圧倒的に開発スピードが早く(扱いやすい)、
逆に、MFCの開発スピードが遅く(扱いにくい)、イライラしっぱなしです。
(CLIの開発では、WEBにあるC#のコードを参考にしながら、
 コーディングしています。)

そこで、何点か疑問に思ったので、ご回答頂けませんでしょうか。
(1)CLIとC#を区別した理由は何なのでしょうか。
(2)MFCはこれからも使われるのでしょうか。
 (MFCで新規開発をすることは、まだまだ大勢なのでしょうか。)
(3)VC++2005以降、MFCは有償らしいのですが、
 VC++6.0(MFC)とVC++2005(MFC)は何か変わったのでしょうか。
 (コーディングしやすくなっていますか?)
(4)個人差はあると思いますが、開発スピードが一番早いのは、
 CLR、C#、MFCのどれでしょうか。
 
すぐに返信ができないと思いますが、
宜しければ、ご回答頂けると幸いです。

いつも大変お世話になっています。
VC++初心者です。

VC++6.0(MFC)、VC++2005(CLR)(C++/CLI)(Express Edition)を
同時期に使い始めて何ヶ月か経ちました。
現在では、CLIの方が圧倒的に開発スピードが早く(扱いやすい)、
逆に、MFCの開発スピードが遅く(扱いにくい)、イライラしっぱなしです。
(CLIの開発では、WEBにあるC#のコードを参考にしながら、
 コーディングしています。)

そこで、何点か疑問に思ったので、ご回答頂けませんでしょうか。
(1)CLIとC#を区別した理由は何なのでしょうか...続きを読む

Aベストアンサー

私も私見ですが。

> (1)CLIとC#を区別した理由は何なのでしょうか。
CLIはC++的だが、C#はJava系の文法。近いけど遠い。
要するに慣れ親しんだC++を使いたい人向け。

> (2)MFCはこれからも使われるのでしょうか。
市販ソフトメーカーなど企業で資産のあるところは使っていくでしょうね。シェア・フリーソフトの作家でもそうですが。
C#とCLIは、インストール時に.net frameworkのインストールがあるから嫌われている所があるんじゃないでしょうか。.net系のソフトですよってばれますし。逆コンパイルがネイティブより容易ってのがライセンス認証しているメーカーとかシェアウェア作者さんには気になるポイントでしょう。一応難読化ツールもありますが。

> (4)個人差はあると思いますが、開発スピードが一番早いのは、
> C++/CLI、C#、C++とMFCのどれでしょうか。
C#かなぁ。
まぁ、面倒なソフトになったらどれでもさほど変わり無い気がしますね。ただ、.NET系はガベージコレクションがうれしいですが。

私も私見ですが。

> (1)CLIとC#を区別した理由は何なのでしょうか。
CLIはC++的だが、C#はJava系の文法。近いけど遠い。
要するに慣れ親しんだC++を使いたい人向け。

> (2)MFCはこれからも使われるのでしょうか。
市販ソフトメーカーなど企業で資産のあるところは使っていくでしょうね。シェア・フリーソフトの作家でもそうですが。
C#とCLIは、インストール時に.net frameworkのインストールがあるから嫌われている所があるんじゃないでしょうか。.net系のソフトですよってばれますし。逆コンパイルが...続きを読む

QVC++ Express m_hWnd

VC++ Express edition 2008で、Command Promptを起動、directoryを替えようとして、

HINSTANCE ret = ShellExecute(m_hWnd,"open","cmd.exe",NULL,"c:\\Program Files",SW_SHOW)

で、m_hWndが定義されていないとエラーが出てきました。VC++2005 standard version では出るようですが、Express edition 2008では定義されてないようです。この部分、Expression editionではどのように定義するのか教えてください。2008 Express editionで別の変数が適当であれば、そちらを教えていただけませんか?

Aベストアンサー

Express EditionにはMFCライブラリは入っていないはずです。Standard Editionには入っています。
で、m_hWnd変数はCWndクラスのメンバ変数なのですが、そのCWndクラスまたはその派生クラスを使っているんでしょうか?
また、ShellExecute関数はWin32APIです。MFCライブラリの関数ではありません。
ご提示された、”外部プログラムを実行する”というのは、通常C++/CLIで、.Net Frameworkに用意されている関数やクラスでは実現できないコードを書くためにWin32APIや外部DLLの関数を呼び出したりするために使用するものでしょう。
勉強のためならばいいのですが、そうでないのならC++/CLIでShellExecute関数などのWin32APIありきなコードを書くのはやめることをおすすめします。

補足
ShellExecute関数のm_hWndの部分は、親ウィンドウのハンドルを渡します。今回の場合、Formクラスが親ウィンドウになるので、以下のような記述になるでしょう。

HINSTANCE ret = ShellExecute((HWND)this->Handle,"open","cmd.exe",NULL,"c:\\Program Files",SW_SHOW);

Express EditionにはMFCライブラリは入っていないはずです。Standard Editionには入っています。
で、m_hWnd変数はCWndクラスのメンバ変数なのですが、そのCWndクラスまたはその派生クラスを使っているんでしょうか?
また、ShellExecute関数はWin32APIです。MFCライブラリの関数ではありません。
ご提示された、”外部プログラムを実行する”というのは、通常C++/CLIで、.Net Frameworkに用意されている関数やクラスでは実現できないコードを書くためにWin32APIや外部DLLの関数を呼び出したりするために使用する...続きを読む

Qvc++6.0 と vc++2500

vc++6.0で

ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

となっていてコンパイルできていたのですが

2005にしたら
コンパイルできません
どうしたらコンパイルできますか

6.0と2005の違いを知るには何を読んだらいいでしょうか?

Aベストアンサー

std::ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

としてみてはいかがでしょうか。

QVC++ MFC フォルダサイズの表示

こんばんは。
エクスプローラのフォルダのプロパティを表示させたときの
ように
ダイアログを表示してから
フォルダサイズの表示が変わるようにしたいのですが
やり方がわかりません。
お分かりになる方、ご回答よろしくお願いします。

Aベストアンサー

★アドバイス
・ファイルサイズの計算中にダイアログにその数値を表示する仕組みを作って下さい。
 つまり、ファイルサイズを計算するループ中にダイアログに加算したサイズを
 SetDlgItemText() などで表示します。あとループ中にメッセージの処理をする
 記述をしないとダイアログ画面が真っ白になってフリーズ状態の感じになります。
 画面の更新の為にメッセージを処理する PumpMessage() などを1行記述すればよい。
・ファイルサイズの計算は再帰処理をしていると思うのでフォルダ検索の最後の部分で
 ダイアログへ加算結果を表示するようにします。
・以上。

参考URL:http://msdn2.microsoft.com/ja-jp/library/t1tkd768(VS.80).aspx,http://forums.belution.com/ja/vc/000/186/57s.shtml

QVC++ExpressEdition2005でのMFC利用

Visual Stdio Express Edition 2005 C++のMFCに関して質問させてください。

とあるプロジェクトをコンパイルしますと,
"AFXWIN.H":No such file or directoryとのエラーが出ます。
調べて見たところ,AFXWIN.hはMFCだと言う記述を目にしました。
そして公式サイトの記述によりますと,
>MFCとATLはVisual C++ 2005 Express Editionには含まれません。MFCとATLは、その他のすべてのVisual Studio2005エディションに含まれる予定です。
なのだそうです。
ですので,MFCを含むプログラムをこのソフトでやるのは無理かな?
と思ったのですが,PSDKをインストールすればExpressEditionでも出来る,
という事も聞きました。
結局真実がどうなのかがわからなくなってしまいました。

Visual C++ 2005 Express EditionではMFCは使えるのかどうか?
またもしExpressEditionで使えないのならば,どれなら使えるのか?(Standard?Professional?)
ご存知の方いらっしゃいましたらご鞭撻どうぞ宜しくお願いいたします。

Visual Stdio Express Edition 2005 C++のMFCに関して質問させてください。

とあるプロジェクトをコンパイルしますと,
"AFXWIN.H":No such file or directoryとのエラーが出ます。
調べて見たところ,AFXWIN.hはMFCだと言う記述を目にしました。
そして公式サイトの記述によりますと,
>MFCとATLはVisual C++ 2005 Express Editionには含まれません。MFCとATLは、その他のすべてのVisual Studio2005エディションに含まれる予定です。
なのだそうです。
ですので,MFCを含むプログラムをこのソフトでや...続きを読む

Aベストアンサー

やはり記憶は正しかったようですね。

> なんだか致命的なことが足りないのだな,ということは察しました。

致命的かどうかは何ともいえません。

実際、MFC 1.0の頃(当時はVisual C++ではなく、Microsoft C/C++ 7.0でした)は、何とかウィザードなしで、みんな手作業でコーディングしていましたし、Borland C++、C++ BuilderX、CodeWarrior等に付属のMFCも似たような状況ですから、面倒ですがやってやれないことはありません。


人気Q&Aランキング

おすすめ情報