Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Probleme Creation Bouton

3 views
Skip to first unread message

Fender6

unread,
Dec 4, 2009, 11:21:29 AM12/4/09
to
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+

Christian ASTOR

unread,
Dec 4, 2009, 5:56:33 PM12/4/09
to
On 4 déc, 17:21, Fender6 <grignottel...@orange.fr> wrote:
> 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.

Message has been deleted

Fender6

unread,
Dec 5, 2009, 4:03:43 AM12/5/09
to

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

unread,
Dec 5, 2009, 5:19:20 AM12/5/09
to
On 5 déc, 10:03, Fender6 <grignottel...@orange.fr> wrote:
> > 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 );
}

Message has been deleted

Fender6

unread,
Dec 5, 2009, 7:31:20 AM12/5/09
to

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

unread,
Dec 5, 2009, 9:09:28 AM12/5/09
to
On 5 déc, 13:31, Fender6 <grignottel...@orange.fr> wrote:

> 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/library/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

unread,
Dec 5, 2009, 9:44:58 AM12/5/09
to
On 5 déc, 15:09, Christian ASTOR <casto...@club-internet.fr> wrote:
> On 5 déc, 13:31, Fender6 <grignottel...@orange.fr> wrote:
>
> > 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/library/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

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

0 new messages