Problème de Focus entre fenêtre principal et Enfant [Résolu]

Signaler
Messages postés
118
Date d'inscription
mercredi 24 décembre 2003
Statut
Membre
Dernière intervention
11 décembre 2011
-
Messages postés
118
Date d'inscription
mercredi 24 décembre 2003
Statut
Membre
Dernière intervention
11 décembre 2011
-
Salut,

Voila mon problème est que sur ma fenêtre enfant je n'arrive à dire jamais à avoir la "Title bar" en bleu non grisé,
j'ai testé plusieurs méthode dont le SetFocus etc , mais rien à faire.

Niveau code j'ai en fenêtre parent :    

   MainHWND = CreateWindowEx (0,
                           szClassName,
                           "Main Window",
                           WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE,
                           CW_USEDEFAULT,
                           CW_USEDEFAULT,
                           CW_USEDEFAULT,
                           CW_USEDEFAULT,
                           NULL,
                           NULL,
                           hThisInstance,
                           &Parent);

----------------------------------------------------------------------
Et enfant:

                      hwndStatus = CreateWindowEx (WS_EX_TOOLWINDOW
                                   ,szStatusName,"Enfant",WS_CHILD | WS_BORDER | WS_CAPTION  | WS_MINIMIZEBOX | WS_OVERLAPPED,
                                   0,0,800,600,
                                   hwnd,
                                   (HMENU) 50,
                                   (HINSTANCE) GetWindowLong(hwnd,GWL_HINSTANCE),
                                   NULL);
----------------------------------------------------------------------

J'ai tester plein de méthode citer dans ce poste: http://www.cppfrance.com/forum/sujet-WS_POPUP-FOCUS_728551.aspx
Comme la Fontion SetParent , mais avec celle-ci ma fenetre enfant n'apparait plus.

J'ai essayé plein de Windows Style comme le WS_EX_TOPMOST , mais rien y fait .

Si vous avec une idée , voila un petit screen du Pb : http://pkzm62.free.fr/essai222.JPG

Merci d'avance.

Ciao

3 réponses

Messages postés
118
Date d'inscription
mercredi 24 décembre 2003
Statut
Membre
Dernière intervention
11 décembre 2011

Pour les intéressé voila un Simple code pour Crée une fenêtre MDI avec CreateWindow()
Testé sous Dev-cpp.

#include <windows.h>

#define IDM_MDICLIENT                   101
#define IDM_WINDOWCHILD           102
#define IDM_BROWSE                        103

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildMDI(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

char szClassName[ ] = "WindowsApp";
char szChildDialog[]="WindowChild";

void CreateMDI();

HINSTANCE hInst;
HWND MainHwnd;
HWND hwndMDI;

int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
    HWND hwnd;          
    MSG messages;           
    WNDCLASS wc;      
   
    HMENU hSubMenu2=CreatePopupMenu();
    AppendMenu(hSubMenu2,MF_STRING,IDM_BROWSE,"&Ouvrir");
   
    HMENU hMenu=CreateMenu();
    AppendMenu(hMenu,MF_POPUP,(UINT_PTR)hSubMenu2,"&Fichier");

    wc.style=CS_SAVEBITS|CS_DBLCLKS;
    wc.lpfnWndProc=(WNDPROC)WndProc;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hInstance=hThisInstance;
    wc.hIcon=LoadIcon((HINSTANCE)NULL,IDI_APPLICATION);
    wc.hCursor=LoadCursor((HINSTANCE)NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)(COLOR_WINDOWFRAME);
    wc.lpszMenuName=NULL;
    wc.lpszClassName="MainWndClass";

    if(!RegisterClass(&wc))
    return 0;
   
    wc.lpfnWndProc=(WNDPROC)ChildMDI;
    wc.hIcon=NULL;
    wc.lpszMenuName=(LPCTSTR)NULL;
    wc.cbWndExtra=0;
    wc.lpszClassName=szChildDialog;
   
    if(!RegisterClass(&wc))
    return 0;
   
    hInst=hThisInstance;

    MainHwnd=CreateWindow(
         "MainWndClass",
           "Main Window",
        WS_CAPTION|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU|WS_VISIBLE|WS_SIZEBOX|WS_CLIPCHILDREN,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        600,
        600,
        (HWND)NULL,
        hMenu,
        hInst,
        (LPVOID)NULL);

      ShowWindow (hwnd, nFunsterStil);
   
      while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_CREATE:
        {
            CLIENTCREATESTRUCT ccs;
            ccs.hWindowMenu=GetSubMenu(GetMenu(hwnd),1);
            ccs.idFirstChild=IDM_WINDOWCHILD;
           
            hwndMDI=CreateWindow(
                "MDICLIENT",
                (LPCTSTR)NULL,
                WS_CHILD|WS_CLIPCHILDREN|WS_VSCROLL|WS_HSCROLL,
                0,0,0,0,
                hwnd,
                (HMENU)IDM_MDICLIENT,
                hInst,
                (LPSTR)&ccs);
   
                ShowWindow(hwndMDI,SW_SHOW);
        }
        break;
   case WM_COMMAND:
        {
        if(LOWORD(wParam)==IDM_BROWSE)
            {
                CreateMDI();
            }
            else
            {
                return DefFrameProc(hwnd,hwndMDI,uMsg,wParam,lParam);
            }
        }
        break;
    case WM_CLOSE:
        {
            PostQuitMessage(0);
        }
        break;
    case WM_QUIT:
        {
            PostQuitMessage(0);
        }
        break;
    default:

        return DefFrameProc(hwnd,hwndMDI,uMsg,wParam,lParam);
    }

    return 0;
}
LRESULT CALLBACK ChildMDI(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_CLOSE:
        {
        }
        return DefMDIChildProc(hwnd,uMsg,wParam,lParam);
    default:
        return DefMDIChildProc(hwnd,uMsg,wParam,lParam);
    }
}
void CreateMDI()
{
    MDICREATESTRUCT mcs;
    mcs.szTitle="Fenêtre MDI";
    mcs.szClass=szChildDialog;
    mcs.hOwner=hInst;
    mcs.x=10;
    mcs.y=10;
    mcs.cx=400;
    mcs.cy=400;
    mcs.style=0;
    HWND NewHwndMDI;
    NewHwndMDI=(HWND)SendMessage(hwndMDI,WM_MDICREATE,0,(LONG)(LPMDICREATESTRUCT)&mcs);
}

Ciao
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Pour faire ce genre de choses, il faut utiliser le MDI (Multi Document Interface), donc notamment WS_EX_MDICHILD.
Messages postés
118
Date d'inscription
mercredi 24 décembre 2003
Statut
Membre
Dernière intervention
11 décembre 2011

Merci de l'aiguillage ,je vais faire mes recherches et déposer une exemple si je trouve

Ciao