mcrblog

vcpp-ml

2000年06月

30

[vcpp 00042122] Re: レジストリのアクセス権(Win2000対応)

もりやまさん、こんばんは。
さあもとです。

Moriyama wrote:
> OSのバージョンをチェックして、95/98のときはOKよって返して
> NT系の時は、ログオンしている権限を取得してチェックしました。
> 別にGetProcAddressや別DLLにはしていません。

ふむふむ、Win95/98でもADVAPI32.DLLでセキュリティ関係のAPIは
エクスポートされてるんですね。
(今、自宅のWin98でチェックしてみました(^^;))
未サポートだからエントリ自体がないのかと思ってました。

> レジストリをオープンしてみることについては、副作用がないか
> 心配です。(調べていません)

おっしゃる通りですね。
(将来にわたる互換性も心配だし)
やっぱり正攻法で調べることにします。

ご助言ありがとうございました。

~~~~~~~~~~~~~~~~~~~~~~~~~~
  へ  へ    さあもと
  の  の    E-Mail : s...@deneb.freemail.ne.jp
~~~~~~~~~~~~~~~~~~~~~~~~~~
30

[vcpp 00042121] Re: ComboBoxEx でフォーカス取得イベントが取れない?

宮崎@イーストです。

2000/06/30 20:55:31 頃、yoh さんが書いたメールについて

> んー、OnCommandって
> 「子コントロールから通知メッセージが送られたとき」に呼ばれると
> ヘルプに書いてありますね。なるほどなるほど・・・。

> では、WindowProcは、ウインドウに送られてきたメッセージを
> 処理する(先ほどの問いでの前者)を処理する場・・・ということでしょうか?

「先ほどの問いでの前者」ではありません。
WindowProc は「そのウィンドウに送られたすべてのメッセージを受けとる」
関数で、MFC のデフォルトの WindowProc は、そのメッセージに応じて
適宜 OnXXXX を呼び出します。
つまり、WindowProc は WM_SETFOCUS も WM_COMMAND も両方受けとり、
それぞれを(存在すれば)OnSetFocus や OnCommand に振り分ける仕事を
しているのです。

で、MFCで普通に作っている分にはデフォルトのWindowProcがちゃんと処理
してくれますんで、自前のWindowProcを作る必要はまったく無いです。

まあ、メッセージが来てるかどうかの「確認」に使うのは便利ですけど、
ここで下手にメッセージを処理してしまうと、MFC本来のメッセージ処理
機構をおかしくしてしまいかねません。

>  馬渕さんの言いたかったことは
>  まだ半分しか分かってないかな・・・。(;-;)

> afx_msg void OnSetFocus( CWnd* ); 
> ON_WM_SETFOCUS(IDOK,OnSetFocus)

この記述正しく無いですから :-)

もし本当に WM_SETFOCUS を処理したい場合のマップエントリは
ON_WM_SETFOCUS()
だけです。引数はありません。

でも、今回の話では必要無いですよね。

-- 
イースト株式会社
宮...@est.co.jp
30

[vcpp 00042120] Re: C++とMFC

うえだです。

On Fri, 30 Jun 2000 16:53:14 +0900
TARO MINOWA <w...@pop21.odn.ne.jp> wrote:
> 補足ですが、僕のイメージでは、VC++はC++とある以上、オブジェクト指向言語で
> あるC++を用いてwindowsプログラムが作れるものであると思います。

> そこで、「憂鬱なプログラマのためのオブジェクト指向開発講座」で、
> C++における設計分析、コーディング法をきちんと学んで、
> それをMFCでプログラムする際に生かせたらと思いまして、この疑問につきあたっ
> たわけです。

> 皆さんは、プログラムを作る手順として、このへんの事はどういう風に考えているのでしょうか?

上の2段落目についてですが、
考え方が逆なのではないでしょうか。

MFCというのはWindowsアプリケーションを作成するためのライブラリであって、
漠然としたいいかたですみませんが、MFCの思想というか意図というか、そこに存在します。
その思想を具現化するのにC++を使っているととらえるべきではないかと思います。

初期化(事前)、実行、後始末(事後)というのは、
C++に限らず、一般的な考えですしね。

ところで、余談ですが。、
「C++における設計分析、コーディング法」というのがよく分かりませんが、
具体的にどんなことをいわれているのでしょうか。

// 上田 秀樹
30

[vcpp 00042119] Re: ComboBoxEx でフォーカス取得イベントが取れない?

宮崎@イーストさん、こんばんは。
RESありがとうございます。


宮崎@イーストさん wrote:
>宮崎@イーストです。うー

(うー・・・わんわんわん!!!(怒) と読める・・・ ^_^;)

度々お手数おかけしまして
本当に申し訳ありませんです。

きゃいんきゃいん。(←負け犬)


>WM_SETFOCUS と、WM_COMMAND/xxN_SETFOCUS では意味合いが
>違うものだということにも気付いてください。

あっ・・・。(゜゜;)

馬渕さんも

>このマクロは WM_COMMAND - EN_SETFOCUS を捕捉しますが、

と書かれてますね。
十分に理解できていませんでした。(ごめんなさい~)


>前者は「フォーカスを受けるウィンドウそのものに送られる」、
>後者は「フォーカスを受けたウィンドウから親ウィンドウに送られる」
>ものです。あなたの欲しいのはどっちですか?

こ、後者です・・・。

OnCommandを使用したら
こんな感じで捕捉できました!

----------------------------------------------------------

BOOL Cxxx::OnCommand(WPARAM wParam, LPARAM lParam) 
{

  switch(HIWORD(wParam))
  {
  case BN_SETFOCUS:
    CWnd* wnd = FromHandle((HWND)lParam);
    if(IDOK==wnd->GetDlgCtrlID())
    {
      TRACE("キャッチ成功!!\n");
      return TRUE;
    }
    break;
  }

  return CDialog::OnCommand(wParam, lParam);
}

----------------------------------------------------------

んー、OnCommandって
「子コントロールから通知メッセージが送られたとき」に呼ばれると
ヘルプに書いてありますね。なるほどなるほど・・・。

では、WindowProcは、ウインドウに送られてきたメッセージを
処理する(先ほどの問いでの前者)を処理する場・・・ということでしょうか?

(んー全然使い分けが理解できてなかったなぁ。-_-; 反省。)

# なんかこのあたりのことって断片的には知っていることなのですが、
# それが完全に関連付けられて理解できていないから、
# 指摘されると、あ、あれはこういうことだったのか!
# というのが結構あります・・・。
# (この時、切れていた知識がつながったような感じが・・・)


馬渕さん wrote:
>ボタンの場合は通常のウィンドウ用の
>afx_msg void OnSetFocus( CWnd* ); 
>ON_WM_SETFOCUS(IDOK,OnSetFocus)

OnCommandでキャッチする場合、この上のは
使用しなかったです・・・。

馬渕さんの言いたかったことは
まだ半分しか分かってないかな・・・。(;-;)


宮崎さん、どうもありがとうございました。
学習スピードの遅い、のろまな亀さんですけど、
これからもよろしくお願いいたします。m(_ _)m


# なんのなんの。
# 歩みののろい亀さんだってコツコツ歩けばそのうち・・・!!
# なんちゃって。(^^;)

-----
yoh
30

[vcpp 00042118] Re: C++とMFC

日峰です。

> > C言語、とありますが、MFCを使用しないWindowsアプリケーションの開発をな
さったことはありますでしょうか?
>
> ないです。突然MFCに突入しました。

私はMFCが登場する前にC言語に触れました。

> > 上記の程度では、メッセージループ(ドリブン)とかマルチスレッドとかは
> > 理解できないと思います。
> > また、既に「憂鬱なプログラマのためのオブジェクト指向開発講座」
> > によって基本的なことが判っているならそれで終わりなのでは。
> メッセージループは、MFCの勉強ををしたときにウィンドウズプログラミングの基
> 本として勉強しました。知識がバラバラでつながってないんですよ。
>
> 補足ですが、僕のイメージでは、VC++はC++とある以上、オブジェクト指向言語で
> あるC++を用いてwindowsプログラムが作れるものであると思います。
>
> そこで、「憂鬱なプログラマのためのオブジェクト指向開発講座」で、
> C++における設計分析、コーディング法をきちんと学んで、
> それをMFCでプログラムする際に生かせたらと思いまして、この疑問につきあたっ
> たわけです。

その本を持っています。頭が硬くてついていけない。
教えてもらいたいくらいです。

そういえば、
VCのチュートリアルにあるお絵かきプログラムは
オブジェクト指向を活かしていないから
MSJにオブジェクト指向に直したサンプルがありました。
# 昔の雑誌なので入手困難

> 皆さんは、プログラムを作る手順として、このへんの事はどういう風に
> 考えているのでしょうか?

MFCに納得のいかない部分もあれば、
上手くできているなあと思う点もあります。

ウィンドウ関連やCOMはMFCやATLを利用する。
とりあえず最初は最低限必要なことを理解するだけ。
仕組みみたいな部分を知っていたほうが好いけど、
とても把握できる量と難易度ではない。

メッセージドリブンやマルチスレッドだとデバッガで追うのは大変です。

MFCやATLはウィンドウやCOMを簡単に使うための
ライブラリやフレームワークと割り切って、それに従い、
それ以外の部分でがんばればいいのかな?。

MFCのシリアライズは面白い(楽しいとは限らない)かもしれない。
私は主に、規格が決まっているバイナリやテキストファイルの
読み書きを扱うので、(ドキュメントビューを)使っていない(判らない)です。
# これに関してはなかなか従えない。
記事検索
Amazon.co.jp
  • ライブドアブログ