0

編集: jItems::populate ( std::string myList )への呼び出しを jDropDown::jDropDown のコンストラクターに移動すると、 jDropDown :: jDropDownの他の場所から子ウィンドウが作成されます。

もともとは、ドロップダウン (jDropDown) ウィンドウが表示 (表示) されたときに呼び出され、プログラムのフローでは、jItems::populate ( std::string myList ) の呼び出しを jDropDown::コンストラクターに移動することはできません。 jDropDown .


私がやろうとしているのは、ゼロからカスタム ドロップダウン ボックスを作成することです。私が直面している問題は、最終的なアイテム (jItem) ウィンドウが作成されないことです。ドロップダウンボックスもjPanelから駆動されるため、すべてのウィンドウを作成するのは同じプロセスに従いますが、最終的なアイテム(jItem)ウィンドウは作成されず、表示されず、ビジュアルスタジオSpy ++で見つけることができません

インスタンス ハンドルとウィンドウ ハンドルをチェックしましたが、両方のチェックで true が返されましたが、jItem ウィンドウは表示されず、spy++ で見つけることができません (spy++ で他のすべてのウィンドウを表示できます)。

どんな助けでも大歓迎です。

参照画像と関連コードを次に示します。

ここに画像の説明を入力

bool jPanel::registered = false;


jPanel::jPanel( std::string txt, int x, int y, int width, int height, HWND parent, HINSTANCE hInstance, WORD bitmap, DWORD style ) 
                  : jControl( parent, hInstance, bitmap )
{


    if ( ! registered )
    {

        WNDCLASSEX wincl;

        wincl.hInstance         = hInstance;
        wincl.lpszClassName     = "jPanel";
        wincl.lpfnWndProc       = WndProc;
        wincl.style             = CS_BYTEALIGNWINDOW;
        wincl.cbSize            = sizeof ( WNDCLASSEX );
        wincl.hIcon             = 0;
        wincl.hIconSm           = 0;
        wincl.hCursor           = ::LoadCursor ( NULL, IDC_ARROW );
        wincl.lpszMenuName      = NULL;
        wincl.cbClsExtra        = 0;
        wincl.cbWndExtra        = 4;
        wincl.hbrBackground     = ::CreateSolidBrush ( backgroundColor );



        ::RegisterClassEx ( &wincl );


        jPanel::registered = true;

    }

    DWORD flag = WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_CHILD;

    if ( style )    flag = flag | style;


    hwnd = ::CreateWindowEx ( 0, "jPanel", txt.c_str (  ), flag, x, y, width, height, parent, 0, hInstance, ( LPVOID ) this ) ;


};



jDropDown::jDropDown ( std::string txt, int x, int y, int width, int height, HWND parent, HINSTANCE hInstance, WORD bitmap )
                     : jPanel ( txt, x, y, width, height, parent, hInstance, bitmap ), capture ( false ), populated ( false )
{

    RECT rect;

    ::GetWindowRect ( hwnd, &rect );

    ::MapWindowPoints ( HWND_DESKTOP, ::GetParent ( parent ), ( LPPOINT ) &rect, 2 );


    items = new jItems ( "My Items List", rect.left, rect.top + height, width, 300, ::GetParent( parent ), hInstance, 0 );

    items->setBackgroundColor (  RGB ( 100, 100, 100 )  );

};




jItems::jItems ( std::string txt, int x, int y, int width, int height, HWND parent, HINSTANCE hInstance, WORD bitmap )
                     : jPanel ( txt, x, y, width, height, parent, hInstance, bitmap ), wWidth ( width ), wHeight ( 30 )
{

    ::SetWindowPos ( this->hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );

};





bool jItems::populate ( std::string myList )
{



    int y = 0;
    Hinstance hInstance = ::GetModuleHandle ( NULL );


    std::vector < std::string >  list = model::Service::explode ( "^", myList );


    for (   std::vector < std::string >::const_iterator it = list.begin (  );       it != list.end (  );        ++it    )
    {

        std::string s = *it;


        jItem *i = new jItem ( "Your Item", 0, y, wWidth, wHeight, this->hwnd, hInstance, 0 );

    }


    ::SetWindowPos ( this->hwnd, HWND_TOP, 0, 0, wWidth, list.size (  ) * wHeight, SWP_NOMOVE | SWP_NOZORDER );


    return true;

};



jItem::jItem ( std::string txt, int x, int y, int width, int height, HWND parent, HINSTANCE hInstance, WORD bitmap )
                     : jPanel ( txt, x, y, width, height, parent, hInstance, bitmap ), empty ( false )
{



    this->setBackgroundColor (  RGB ( 65, 65, 65 )  );



};
4

0 に答える 0