unsichtbare CEdit in CPropertyPage



  • Hallo Leute,

    ich habe in einer PropertyPage versucht eine von CEdit abgeleitete Control anzuzeigen, für die erst im Property_Derived_Class::OnInitDialog() Create(...) aufgerufen wird.
    Die Parameter CRect und dwStyle für Create() nehme ich von einer bereits erzeugten CEdit und zerstöre diese anschliessend.
    Ich habe auch versucht mit ModifyStyleEx() die extended styles an die vorgegebene control anzugleichen. Doch leider bleibt die Control unsichtbar (wobei der text darin sichtbar ist 😕 )

    /* in der *.h file */
    CLogCtrl m_LogCtrl;    //die CLogCtrl erbt von CEdit
    
    /* in der *.cpp file */
    CEdit * pTmpEdit;
    
    CRect rCtrl;
    pTmpEdit->GetClientRect(&rCtrl);
    pTmpEdit->ClientToScreen(&rCtrl);
    ScreenToClient(&rCtrl);
    
    DWORD dwStyle = pTmpEdit->GetStyle();
    DWORD dwExStyle = pTmpEdit->GetExStyle();
    
    pTmpEdit->DestroyWindow();
    
    dwStyle |= ES_MULTILINE|ES_NOHIDESEL|ES_READONLY|ES_LEFT|ES_AUTOVSCROLL|ES_AUTOHSCROLL;
    
    m_LogCtrl.Create(dwStyle,rCtrl,this,IDC_LOG);
    m_LogCtrl.ModifyStyleEx(NULL,dwExStyle);
    m_LogCtrl.ShowWindow(SW_SHOW);
    

    Kennt einer von euch das Problem?



  • Hallo,

    beim VS 6 muss in der InitInstance() folgendes eingefügt werden:

    AfxEnableControlContainer();
    AfxInitRichEdit();

    Gruß
    Anlen



  • Leider nein. Brachte keine Veränderung.
    Ausserdem hab' ich bereits VS2k5 (Version 8).


  • Mod

    Ist WS_VISIBLE gesetzt?
    Was sagt der Spy++? Ist das Control vorhanden?

    Das ist einfacher:

    CRect rCtrl;
    pTmpEdit->GetWindowRect(&rCtrl);
    ScreenToClient(&rCtrl);
    

    Warum machst Du nicht einfach einen Subclass. Was für extra Stile müssen denn sein, dass Du das alte Control zerstören musst?



  • Die Control ist vorhanden und sichtbar; nur der Rahmen nicht.

    Spy++ bringt folgendes zum Vorschein:

    WindowStyle:
    WS_CHILDWINDOW, WS_VISIBLE, WS_TABSTOP, ES_LEFT, ES_MULTILINE, ES_AUTOVSCROLL, ES_AUTOHSCROLL, ES_NOHIDESEL, ES_READONLY

    ExtendedStyle:
    WS_EX_LEFT, WS_EX_LTRREADING, WS_EX_RIGHTSCROLLBAR, WS_EX_NOPARENTNOTIFY, WS_EX_CLIENTEDGE

    Die GetWindowRect()-Funktion klappt. Danke für den Tipp.


  • Mod

    WS_BORDER wird beim Create des Edit Control entfernt. Man kann einem Edit Control nach dem Erzeugen nicht ansehen, ob es mit WS_BORDER order ohne erzeugt wurde! By design...



  • Mit WS_BORDER klappt so halbwegs. 🙂

    Es lässt sich so ein dünner, schwarzer Rand anzeigen. Ursprünglich wollte ich ein Aussehen einer standard-CEdit (so eingedrückt), doch in der Zwischenzeit freue ich mich schon sehr über das erzielte Ergebnis.

    Herzlichen Dank!


  • Mod

    Für die 3D Dartsellung des Edit Controls musst Du IMHO WS_EX_CLIENTEDGE
    dazu nehmen.



  • Nö. Leider nicht. (Ist ja auch schon enabled.)

    Hauptsache n Rahmen. Der geht auch.


  • Mod

    Also meine Edit Controls bekommen mit

    ModifyStyleEx(0,WS_EX_CLIENTEDGE,SWP_NOZORDER|SWP_NOSIZE|SWP_NOMOVE|SWP_DRAWFRAME);
    

    Den entsprechenden 3d Rahmen.



  • 😃 😃 😃 Jaaaaa, Flags vergessen! 😃 😃 😃

    Jetzt läufts. So mit richtigem Rahmen und so. Wenn jetzt nicht erst halb zehn wär', würd' ich jetzt Feierabend machen. 😉

    Vielen herzlichen Dank, Du hast mir sehr geholfen.


Anmelden zum Antworten