Probleme Creation Bouton

Le
Fender6
Salut,

J'ai un problème lorsque je veux créer un bouton , celui ne s'affiche
pas dans la fenêtre pourtant je n'ai pas d'erreurs a la compilation .

Je creer une fenetre Static comme ceci :

HWND fenetre5 = CreateWindow("STATIC","",WS_CHILD | WS_VISIBLE |
SS_NOPREFIX,235, 130, 530, 365,fenetrePrincipale,NULL,instance,NULL);


Et je la remplie en la subclassant :

case WM_CREATE:
{

HBITMAP hb2 = LoadBitmap(instance,"IDB_Ajouter");
HWND bouton = CreateWindow("button","", WS_CHILD |
WS_VISIBLE | BS_BITMAP,490,327,35,35,hwnd, NULL , instance, NULL);
SendMessage(bouton, BM_SETIMAGE, IMAGE_BITMAP,
(LPARAM)hb2);

}

Aurais je fait une erreur quelque part ?

a+
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #20696891
On 4 déc, 17:21, Fender6
J'ai un problème lorsque je veux créer un bouton , celui ne s'affiche
pas dans la fenêtre  pourtant je n'ai pas d'erreurs a la compilation .
Je creer une fenetre Static comme ceci :
HWND fenetre5 = CreateWindow("STATIC","",WS_CHILD | WS_VISIBLE |
SS_NOPREFIX,235, 130, 530, 365,fenetrePrincipale,NULL,instance,NULL);
Et je la remplie en la subclassant :

                            case WM_CREATE:



Normal, c'est trop tard pour WM_CREATE
Il faut superclasser, pas subclasser.
Fender6
Le #20698081
On 4 déc, 23:56, Christian ASTOR
On 4 déc, 17:21, Fender6
> J'ai un problème lorsque je veux créer un bouton , celui ne s'affic he
> pas dans la fenêtre  pourtant je n'ai pas d'erreurs a la compilatio n .
> Je creer une fenetre Static comme ceci :
> HWND fenetre5 = CreateWindow("STATIC","",WS_CHILD | WS_VISIBLE |
> SS_NOPREFIX,235, 130, 530, 365,fenetrePrincipale,NULL,instance,NULL);
> Et je la remplie en la subclassant :

>                             case WM_CREATE:

Normal, c'est trop tard pour WM_CREATE
Il faut superclasser, pas subclasser.



Merci pour ton aide ^^
Fender6
Le #20698141
On 4 déc, 23:56, Christian ASTOR
On 4 déc, 17:21, Fender6
> J'ai un problème lorsque je veux créer un bouton , celui ne s'affic he
> pas dans la fenêtre  pourtant je n'ai pas d'erreurs a la compilatio n .
> Je creer une fenetre Static comme ceci :
> HWND fenetre5 = CreateWindow("STATIC","",WS_CHILD | WS_VISIBLE |
> SS_NOPREFIX,235, 130, 530, 365,fenetrePrincipale,NULL,instance,NULL);
> Et je la remplie en la subclassant :

>                             case WM_CREATE:

Normal, c'est trop tard pour WM_CREATE
Il faut superclasser, pas subclasser.



Peux tu m'expliquer en détail en quoi consiste le surclassement car
cette méthode n'est pas très mentionner sur la toile et j'ignore
comment m'en servir.

Merci quand même du temps que tu as déjà passé a résoudre mon
problème .
Christian ASTOR
Le #20698611
On 5 déc, 10:03, Fender6
> Il faut superclasser, pas subclasser.

Peux tu m'expliquer en détail en quoi consiste le surclassement car
cette méthode n'est pas très mentionner sur la toile et j'ignore
comment m'en servir.



Le superclassing (pas subclassing), c'est créer une nouvelle classe de
fenêtre à partir d'une classe existante.
Pour ton exemple, nouvelle classe appelée, par ex, "SuperStatic" avec
un bouton créé en child sur WM_CREATE, à partir de la classe Static
=>

WNDPROC OldSuperClassWndProc;
LRESULT CALLBACK SuperClassWndProc(HWND hWnd, UINT uMsg, WPARAM
wParam, LPARAM lParam);

BOOL InitClass(void)
{
WNDCLASS wc;
GetClassInfo(hInst, "STATIC", &wc);
wc.hInstance = hInst;
wc.lpszClassName = "SuperStatic";
OldSuperClassWndProc = wc.lpfnWndProc;
wc.lpfnWndProc = SuperClassWndProc;

if ( !RegisterClass( &wc ) )
{
MessageBox (NULL, "Registering Error", "Information", MB_OK |
MB_ICONSTOP);
return(FALSE);
}
return (TRUE);
}

avec :

LRESULT CALLBACK SuperClassWndProc(HWND hWnd, UINT uMsg, WPARAM
wParam, LPARAM lParam )
{
static HWND hButton;
switch (uMsg)
{
case WM_CREATE :
{
RECT rc;
GetClientRect(hWnd, &rc);
hButton = CreateWindow("BUTTON","", WS_CHILD | WS_VISIBLE |
BS_ICON,
(rc.right-rc.left - 35)/2,(rc.bottom-rc.top - 35)/2, 38, 38, hWnd,
(HMENU)100, hInst, NULL);
HINSTANCE hLib = LoadLibrary("shell32.dll");
HICON hBitmap = (HICON)LoadImage(hLib, MAKEINTRESOURCE(41),
IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);
FreeLibrary(hLib);
SendMessage(hButton, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hBitmap);
};
break;
case WM_COMMAND :
{
if (HIWORD (wParam) == BN_CLICKED)
{
char sId[32];
wsprintf(sId, "Button Id = %d", LOWORD(wParam));
MessageBox(NULL, sId, "Click", MB_OK);
}
}
break;
default :
return(CallWindowProc(OldSuperClassWndProc, hWnd, uMsg, wParam,
lParam));
}
return 0;
}


Appel =>

if (InitClass())
{
HWND hSuperStatic = CreateWindow ("SuperStatic", "", WS_CHILD |
WS_VISIBLE | SS_NOTIFY, 150, 150, 100, 100, hWnd, 0, hInst, NULL );
}
Fender6
Le #20699001
On 5 déc, 11:19, Christian ASTOR
On 5 déc, 10:03, Fender6
> > Il faut superclasser, pas subclasser.

> Peux tu m'expliquer en détail en quoi consiste le surclassement car
> cette méthode n'est pas très mentionner sur la toile et j'ignore
> comment m'en servir.

Le superclassing (pas subclassing), c'est créer une nouvelle classe de
fenêtre à partir d'une classe existante.
Pour ton exemple, nouvelle classe appelée, par ex, "SuperStatic" avec
un bouton créé en child sur WM_CREATE,  à partir de la classe Sta tic
=>

WNDPROC OldSuperClassWndProc;
LRESULT CALLBACK SuperClassWndProc(HWND hWnd, UINT uMsg, WPARAM
wParam, LPARAM lParam);

BOOL InitClass(void)
{
        WNDCLASS wc;
        GetClassInfo(hInst, "STATIC", &wc);
        wc.hInstance = hInst;
        wc.lpszClassName = "SuperStatic";
        OldSuperClassWndProc = wc.lpfnWndProc;
        wc.lpfnWndProc = SuperClassWndProc;

        if ( !RegisterClass( &wc ) )
    {
        MessageBox (NULL, "Registering Error", "Information", MB_ OK |
MB_ICONSTOP);
        return(FALSE);
    }
    return (TRUE);

}

avec :

LRESULT CALLBACK SuperClassWndProc(HWND hWnd, UINT uMsg, WPARAM
wParam, LPARAM lParam )
{
        static HWND hButton;
        switch (uMsg)
    {
                case WM_CREATE :
                {
                        RECT rc;
                        GetClientRect(hWnd, &rc);
                        hButton = CreateWindow( "BUTTON","", WS_CHILD | WS_VISIBLE |
BS_ICON,
                                (rc.right -rc.left - 35)/2,(rc.bottom-rc.top - 35)/2, 38, 38, hWnd,
(HMENU)100, hInst, NULL);
                        HINSTANCE hLib = LoadLi brary("shell32.dll");
                        HICON hBitmap = (HICON) LoadImage(hLib,  MAKEINTRESOURCE(41),
IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);
                        FreeLibrary(hLib);
                        SendMessage(hButton, BM_S ETIMAGE, IMAGE_ICON, (LPARAM)hBitmap);
                };
                break;
                case WM_COMMAND :
                {
                        if (HIWORD (wParam) = = BN_CLICKED)
                        {
                                char sId[ 32];
                                wsprintf( sId, "Button Id = %d", LOWORD(wParam));
                                MessageBo x(NULL, sId, "Click", MB_OK);
                        }
                }
                break;
                default :
                        return(CallWindowProc(Old SuperClassWndProc, hWnd, uMsg, wParam,
lParam));
        }
        return 0;

}

Appel =>

if (InitClass())
{
        HWND hSuperStatic = CreateWindow ("SuperStatic", "", WS _CHILD |
WS_VISIBLE | SS_NOTIFY, 150, 150, 100, 100,  hWnd, 0, hInst, NULL );



}



Merci pour ton explication .
C'est vraiment sympas de passer du temps a aider les débutant . ^^
Fender6
Le #20699651
On 5 déc, 11:19, Christian ASTOR
On 5 déc, 10:03, Fender6
> > Il faut superclasser, pas subclasser.

> Peux tu m'expliquer en détail en quoi consiste le surclassement car
> cette méthode n'est pas très mentionner sur la toile et j'ignore
> comment m'en servir.

Le superclassing (pas subclassing), c'est créer une nouvelle classe de
fenêtre à partir d'une classe existante.
Pour ton exemple, nouvelle classe appelée, par ex, "SuperStatic" avec
un bouton créé en child sur WM_CREATE,  à partir de la classe Sta tic
=>

WNDPROC OldSuperClassWndProc;
LRESULT CALLBACK SuperClassWndProc(HWND hWnd, UINT uMsg, WPARAM
wParam, LPARAM lParam);

BOOL InitClass(void)
{
        WNDCLASS wc;
        GetClassInfo(hInst, "STATIC", &wc);
        wc.hInstance = hInst;
        wc.lpszClassName = "SuperStatic";
        OldSuperClassWndProc = wc.lpfnWndProc;
        wc.lpfnWndProc = SuperClassWndProc;

        if ( !RegisterClass( &wc ) )
    {
        MessageBox (NULL, "Registering Error", "Information", MB_ OK |
MB_ICONSTOP);
        return(FALSE);
    }
    return (TRUE);

}

avec :

LRESULT CALLBACK SuperClassWndProc(HWND hWnd, UINT uMsg, WPARAM
wParam, LPARAM lParam )
{
        static HWND hButton;
        switch (uMsg)
    {
                case WM_CREATE :
                {
                        RECT rc;
                        GetClientRect(hWnd, &rc);
                        hButton = CreateWindow( "BUTTON","", WS_CHILD | WS_VISIBLE |
BS_ICON,
                                (rc.right -rc.left - 35)/2,(rc.bottom-rc.top - 35)/2, 38, 38, hWnd,
(HMENU)100, hInst, NULL);
                        HINSTANCE hLib = LoadLi brary("shell32.dll");
                        HICON hBitmap = (HICON) LoadImage(hLib,  MAKEINTRESOURCE(41),
IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);
                        FreeLibrary(hLib);
                        SendMessage(hButton, BM_S ETIMAGE, IMAGE_ICON, (LPARAM)hBitmap);
                };
                break;
                case WM_COMMAND :
                {
                        if (HIWORD (wParam) = = BN_CLICKED)
                        {
                                char sId[ 32];
                                wsprintf( sId, "Button Id = %d", LOWORD(wParam));
                                MessageBo x(NULL, sId, "Click", MB_OK);
                        }
                }
                break;
                default :
                        return(CallWindowProc(Old SuperClassWndProc, hWnd, uMsg, wParam,
lParam));
        }
        return 0;

}

Appel =>

if (InitClass())
{
        HWND hSuperStatic = CreateWindow ("SuperStatic", "", WS _CHILD |
WS_VISIBLE | SS_NOTIFY, 150, 150, 100, 100,  hWnd, 0, hInst, NULL );



}



Merci pour ton explication .
C'est vraiment sympas de passer du temps a aider les débutant . ^^

J'ai utilisé ce que tu m'as dit mais j'obtiens toujours l'erreur
"Registering Error" .
J'ai héberge le code source de mon main j'espère que tu pourras
m'aider : http://website2.olympe-network.com/main.cpp
Christian ASTOR
Le #20700491
On 5 déc, 13:31, Fender6
J'ai utilisé ce que tu m'as dit mais j'obtiens toujours l'erreur
"Registering Error" .
J'ai héberge le code source de mon main  j'espère que tu pourras
m'aider :http://website2.olympe-network.com/main.cpp



Il y a diverses erreurs (les WM_PAINT, les subclassing un peu bizarres
(faire comme le superclassing pour la procédure initiale qu'on met en
en global comme sur le vieil article http://msdn.microsoft.com/en-us/librar y/ms997565.aspx),
...)
Appeler GetLastError() si RegisterClass() renvoie 0, pour connaitre la
raison exacte de l'erreur.

J'ai mis un rapide exemple à partir du Wizard Win32 de VS en créant
des contrôles en boucle pour tester =>
http://www.datafilehost.com/download-932cc0da.html
Fender6
Le #20700851
On 5 déc, 15:09, Christian ASTOR
On 5 déc, 13:31, Fender6
> J'ai utilisé ce que tu m'as dit mais j'obtiens toujours l'erreur
> "Registering Error" .
> J'ai héberge le code source de mon main  j'espère que tu pourras
> m'aider :http://website2.olympe-network.com/main.cpp

Il y a diverses erreurs (les WM_PAINT, les subclassing un peu bizarres
(faire comme le superclassing pour la procédure initiale qu'on met en
en global comme sur le vieil articlehttp://msdn.microsoft.com/en-us/libra ry/ms997565.aspx),
...)
Appeler GetLastError() si RegisterClass() renvoie 0, pour connaitre la
raison exacte de l'erreur.

J'ai mis un rapide exemple à partir du Wizard Win32 de VS en créant
des contrôles en boucle pour tester =>http://www.datafilehost.com/dow nload-932cc0da.html



Merci , je pense que cette fois ci je vais me débrouiller un peu tout
seul et arrêtez de t'embêter xD
Publicité
Poster une réponse
Anonyme