0

JNA(Java Native Access)で次のコードを使用して、既存のウィンドウの子ウィンドウを作成しようとしばらく時間を費やしましたが、WindowsAPIを使用しようとしている他のすべてのプログラミング言語とほぼ同じだと思います。

これがCreateWindowsExAの私の宣言です :

public int CreateWindowExA(int i, String string, String string0, int i0, int i1, int i2, int i3, int i4, int ninja, Object object, Object object0, int i5);

そして、これが私がそれを呼ぶ方法です:

int childLabel = user32.CreateWindowExA
(
   0, //sets style to default
   "STATIC", //window style is label
   "Show Message", //label text is show Message
   1342177280, // WS_CHILD + WS_VISIBLE  = &H40000000 + &H10000000
   10,         //x
   90,         //y
   100,        //width
   0,          //height 
   parentWindowHandler,   //a valid handler to a window (has been tested and is valid)
   null,    // a handler to a menu             
   null,  //A handle to the instance of the module to be associated with the window. (NO IDEA)
   0      //arguments list (no idea)
);

関数を呼び出した後、ボタンへの有効なハンドラーを取得します...しかし、それは表示されません。getLastErrorを呼び出し、続いてTranslateMessageを呼び出すと、「関数は正常に完了しました」というメッセージが表示されます。また、GetAncestor(childButton、3)を呼び出すと、ハンドルがparentWindowHandlerに戻ります。GetWindowTextA(childButton..bla)を呼び出すこともでき、ShowMessage文字列を取得します。したがって、明らかに私はparentWindowの子を作成し、そこにあります。ただし、表示されません。次に頭に浮かぶのは、私のウィンドウ/ラベルがその親のz-indexの下部にあるため、他のいくつかの呼び出しを行う必要があり、そうするつもりです。しかし、私が間違った方向にいる場合、私は少し時間を無駄にします。

この子を表示するにはどうすればよいですか、または何が間違っているのですか。コールバックでこれを呼び出したり、メッセージを送信したりしないことに注意してください。

ポインタはありますか?

4

1 に答える 1

0

うん、思った通りだったけどちょっと違う。親ウィンドウが更新されるように、WM_PAINT メッセージを親ウィンドウに送信する必要がありました。

于 2010-10-27T13:28:10.173 に答える