0

親ウィンドウといくつかの子ウィンドウがこれに接続されています。SpyXXを使用すると、子供たち全員が特定のスタイルのクラスを持っていることがわかりますChildWindowClass

この特定のクラスの名前でウィンドウを作成すると、ハンドルCreateWindowExが返されます。NULL自分のクラスを使用して親を設定した場合、ウィンドウは子ウィンドウになりますが、もちろん、他のすべての子とは異なるクラスになります。

スタイルを取得して設定すると、スタイルは検出されますが、子ウィンドウには設定されません。それはまだで使用されるスタイルを示していますCreateWindowEx

HWND firstChild = FindWindowEx(MyClass::_parent, NULL, szFsxChildWindowClass, NULL);
LONG childStyle = GetWindowLong(firstChild, GWL_STYLE);
...
SetWindowLong(MyClass::_child,GWL_STYLE, childStyle);

ChildWindowClass私が登録していないので、どのように登録されているかを確認することはできません。では、子ウィンドウにこのスタイルを設定するにはどうすればよいですか?

-要求に応じて通話を編集します-

 child = CreateWindowEx( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR,
        szWindowClass, // this is where I want to place the name of the child class
        _T("Test"),
        WS_CHILDWINDOW | WS_VISIBLE,
        x,y, // 0,0
        w, h, // 500,100
        MyClass::_parent, // parent
        NULL,
        MyClass::_hInstance, // must this be 0??
        NULL
        );
4

1 に答える 1

1

確認してくださいGetLastError。ゼロ以外の場合は、API を誤って使用している可能性があります。0 の場合は、ウィンドウ プロシージャがWM_NCCREATEまたはから FALSE を返し、明示的に作成に失敗したことを意味しますWM_CREATE

これらのメッセージを処理するとき、ウィンドウ プロシージャは、関数に渡すすべてのパラメーター (スタイル、タイトル、座標、親ウィンドウ、およびメニュー) にアクセスできます。その特定のウィンドウ クラスでは、 を介してlpCreateParams、またはタイトルまたはそれ以外の場合は作成に失敗します。

そのクラスのウィンドウにブレークポイントまたはフックWM_CREATEを設定し、それらの既存の子ウィンドウがどのように作成されたか、パラメーターは何かを調べます。(ドキュメントがないだけだと仮定して!)

于 2012-06-28T11:35:21.897 に答える