時には立ち止まってみるのもいいよ

仕事の合間の息抜き。やってることは仕事と同じ。

WM_USERとWM_APPとRegisterWindowMessage

Windowsのアプリケーションで独自のウインドウメッセージを使う際、

  • WM_USER+?
  • WM_APP+?
  • RegisterWindowMessage

のどれを使うのか、正しい使い分けって知ってましたか?

私は今知りました!!

 

今まではなんとなく、「どうやらWM_USER+?はUSERコントロールが使ってるらしいから、アプリ開発では使わないほうがいい」とどこかで聞いた気がして、WM_APP+?を使っていたのですが。

 

MSDNの説明を読めばよく分かりました。

 RegisterWindowMessage 関数

 

複数のアプリケーションが共通のメッセージを処理する必要がある場合に限って、RegisterWindowMessage 関数を使ってください。1 つのウィンドウクラス内でプライベートメッセージを送信する場合、アプリケーションは WM_USER(0x0400)~0x7FFF の範囲の任意の整数を使うことができます。(この範囲内のメッセージは、アプリケーションではなくウィンドウクラスにとってプライベートです。たとえば、BUTTON、EDIT、LISTBOX、COMBOBOX のようなあらかじめ定義されたコントロールが、この範囲内の値を使うことがあります。)

 

つまり、そのメッセージの機能とその使用範囲で決めればいいわけです。

  1. 自前のWindowクラスで作ったウインドウ固有の機能なら
    そのWindowクラス毎に決めたWM_USER+?を使う
  2. ウインドウクラスに依存しない、アプリケーション固有の機能なら
    そのアプリケーションに決めたWM_APP+?を使う
  3.  複数のアプリケーションで使う機能(外部に機能を公開するような)なら
    RegisterWindowMessageを使う

 

RegisterWindowMessageの説明にある「複数のアプリケーション」というのはおそらく、複数のプロセスとかいう意味じゃなくて、見知らぬアプリケーションに対して自分のアプリケーションが持つ機能を公開する際に使用するのだと思います。

 

 

 

まぁ、結局WM_APPを使うことになるんだろうけど!! ←