none
Programm startet im Hintergrund RRS feed

  • Frage

  • Hallo,

    mein Programm startet im Hintergrund, d.h. sein Hauptfenster wird hinter allen anderen Fenster "versteckt".

    Und außerdem ist es über <alt>-<tab> nicht erreichbar - es wird in der Liste garnicht aufgeführt.

    Woran kann das liegen ?

    Gruß

    Thorsten

     

    Mittwoch, 4. August 2010 09:18

Antworten

  • Hallo Thorsten Kiefer!

    lpCreateStruct->dwExStyle |= WS_EX_TOOLWINDOW;

    Witzbold! Genau dieser Stil wird doch hier gesetzt!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 6. August 2010 13:51
    Moderator

Alle Antworten

  • 1. Wie behandelst Du nCmdShow aus WinMain?
    2. WS_EX_TOOLWINDOW als Stil gesetzt?
    3. Ist das Fenster überhaupt enabled? (Benutze Spy++ um den Stil Deines Fensters zu ermitteln)


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 4. August 2010 09:33
    Moderator
  • Es ist eine CWinApp, ich finde den Code garnicht, wo das Hauptfenster erzeugt wird.

    WS_EX_TOOLWINDOW ist nicht gesetzt. Das Fenster ist nicht enabled, weil die App einen Dialog anzeigt in ...::InitInstance.

    Dieser Dialog erscheint vor dem Hauptfenster (also das Hauptfenster wird auch angezeigt, aber ist disabled)

     

    Mittwoch, 4. August 2010 11:45
  • Wenn es eine Dialog basierende Anwendung ist, dann hast Du einen DoModal der das Fenster erzeugt...

    Was machst Du denn in OnInitDIalog? Kann es sein, dass Deine Anwendung direkt in eine Endlosschleife läuft?


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 4. August 2010 11:54
    Moderator
  • ich weiß nicht genau, ob es eine Dialog-basierende Anwendung ist. Das Hauptformular ist von CNewFrameWnd abgeleitet.

    Und ich weiß nicht, wo es erzeugt wird. Es gibt kein OnInitDialog, aber ein OnCreate.

    Das OnCreate hat den Parameter LPCREATESTRUCT lpCreateStruct.

    Das OnCreate sieht so aus :

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        lpCreateStruct->dwExStyle |= WS_EX_TOOLWINDOW;

        if (CMainFrameWindow::OnCreate(lpCreateStruct) == -1)
            return -1;

    ...

    }

    Aber WS_EX_TOOLWINDOW wird nicht gesetzt.

    Freitag, 6. August 2010 13:28
  • Hallo Thorsten Kiefer!

    lpCreateStruct->dwExStyle |= WS_EX_TOOLWINDOW;

    Witzbold! Genau dieser Stil wird doch hier gesetzt!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 6. August 2010 13:51
    Moderator
  • Hallo,

    Sorry ich hab mich falsch ausgedrückt. in der CreateStruct wird der Stil zwar gesetzt, aber wenn man das Fenster mit spy++ untersucht,

    wird der Stil nicht aufgelistet.

    Gruß

    Thorsten

    Dienstag, 12. Oktober 2010 13:11
  • In OnCreate den Stil zu setzen ist zu spät. Du musst das in PreCreateWindow machen:

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
       if (__super::PreCreateWindow(cs)) {
          cs.dwExStyle |= WS_EX_TOOLWINDOW;
          return TRUE;
       }
       return FALSE;
    }

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 13. Oktober 2010 05:59
    Moderator