Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2501 connectés 

  FORUM HardWare.fr
  Programmation
  API Win32

  [API Win32] Rebar qui ne s'affiche pas dans DialogBox

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[API Win32] Rebar qui ne s'affiche pas dans DialogBox

n°1658700
antsite
Je me souviens
Posté le 15-12-2007 à 16:06:40  profilanswer
 

Salut  :hello:  
 
Je suis en train d'essayer d'utiliser le control Rebar, je souhaite l'inclure dans ma fenetre mais rien ne s'affiche. Tout compile tres bien.
 
Quelques precisions :
- pas de MFC utilisees ici, tout en win32.
- DialogBox & fichier .rc utilises pour construire la boite de dialogue, pas de CreateWindow donc.
- Application Unicode
- compilation avec Visual C++ 2008 Express edition, Windows XP SP2
 
Initialisation en regle pour l'utilisation de Rebar (et eventuellement une Toolbar classique aussi), ceci apres le RegisterClass dans le WinMain.

Code :
  1. INITCOMMONCONTROLSEX icex;
  2. icex.dwSize = sizeof INITCOMMONCONTROLSEX;
  3. icex.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
  4. InitCommonControlsEx(&icex);


ensuite, appel de la macro DialogBox pour creer et affiche la boite de dialogue :

Code :
  1. DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC) DlgProc);


et enfin creation de la Rebar dans la DialogProc (WM_INITDIALOG) :

Code :
  1. BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
  2. {
  3. // ....
  4. case WM_INITDIALOG:
  5. // creation de la Rebar
  6. HWND hwndRebar = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL,
  7. RBS_BANDBORDERS | RBS_VARHEIGHT | CCS_NODIVIDER | CCS_NOPARENTALIGN | WS_BORDER | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE, 0, 0, 480, 20, hDlg, (HMENU)NULL, hInstance, NULL);
  8. // creation d'un bouton destine a aller dans la rebar
  9. HWND hButton = CreateWindowEx(WS_EX_TOOLWINDOW, WC_BUTTON, TEXT("test" ), WS_VISIBLE | WS_CHILD, 0, 0, 50, 14, hwndRebar, (HMENU)NULL, hInstance, NULL);
  10. // creation d'une "Band", conteneur qui sera insere dans la Rebar
  11. REBARBANDINFO rbBand;
  12. rbBand.cbSize = sizeof REBARBANDINFO;
  13. rbBand.fMask = RBBIM_STYLE | RBBIM_TEXT | RBBIM_SIZE | RBBIM_CHILD;
  14. rbBand.fStyle = RBBS_CHILDEDGE | RBBS_GRIPPERALWAYS;
  15. rbBand.lpText = TEXT("Font" );
  16. rbBand.cx = 480;
  17. rbBand.hwndChild = hButton;
  18. // ajout de la Band dans la Rebar
  19. SendMessage(hwndRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);
  20. return TRUE;
  21. // ... autres messages
  22. }


 
ha et puis un extrait du .RC concernant la boite de dialogue

Code :
  1. IDD_MAIN DIALOGEX 0, 0, 480, 250
  2. STYLE WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SIZEBOX | DS_SHELLFONT | DS_CENTER
  3. CAPTION "ColumnReader"
  4. FONT 8, "MS Shell Dlg"
  5. BEGIN
  6. // ... 2 RichEdit controls uniquement ici
  7. END


 
j'ai essaye au debut de creer la rebar comme mes autres controles dans le fichier RC mais vu que rien n'etait rendu a l'ecran j'ai decider de coller un peu plus a la doc et le faire avec un CreateWindowEx... sans grand resultat.
 
La premiere question qui m'est venue et n'est pas explicitee dans MSDN, est est-ce que le hwnd parent du controle qui sera dans la rebar (hButton ici) doit etre la dialog box (hDlg) ou la rebar (hwndRebar) ?
Le plus logique serait hwndRebar comme parent. Enfin ca ne resoud pas le probleme.
 
Toujours est-il que strictement rien n'est affiche / peint dans la boite de dialogue.
(InitCommonControlsEx() est appelee avec succes j'ai verifie)
Si quelqu'un a une idee...
 
merci
 :)

mood
Publicité
Posté le 15-12-2007 à 16:06:40  profilanswer
 

n°1792761
marcob11
Posté le 27-09-2008 à 11:21:37  profilanswer
 

Bonjour
Désolé du retard, je ne sais pas si la question est toujours d'actualité  :D  
 
Avant d'ajouter les 'band' il faut initialiser la rebar:
REBARINFO  rbInfo;
 
ZeroMemory(&rbInfo, sizeof(REBARINFO));
rbInfo.cbSize = sizeof(REBARINFO);
SendMessage(hwndRebar, RB_SETREBARINFO, (WPARAM)0, (LPARAM)&rbInfo);
 
voilà  :D  
 
Jean

n°1792771
antsite
Je me souviens
Posté le 27-09-2008 à 13:27:35  profilanswer
 

Je n'ai pas réessayé depuis, merci pour la réponse c'est toujours un élément de plus.
 
Après de plus amples recherches, le problème semble (aussi ?) venir de la définition de REBARBANDINFO suivant les différents systèmes (XP, Vista).
 
C'est bien expliqué ici : http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3020349&SiteID=1
 
Rq: c'est toujours un problème d'initialisation de structure.
 
Je devrais bientôt retester, affaire à suivre...

n°1792781
marcob11
Posté le 27-09-2008 à 15:09:26  profilanswer
 

oui, c'est à ça que sert le cbSize.
 
perso j'ajoute toujours
#define _WIN32_WINNT  0x561
#define _WIN32_IE 0x600


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  API Win32

  [API Win32] Rebar qui ne s'affiche pas dans DialogBox

 

Sujets relatifs
[Delphi] Problème dans un code / N'affiche jamais la variablePage dynamique ne s'affiche pas php/mysql/easyphp
clique droit affiche un menu différent pour chaque lien[API MSN] plugin msn
Compte à rebours affiché en texte et redirectionAffiche de données au passage de la souri
contenu du champs ne s'affiche pas au completStdou redirigé vers un fichier mais quand meme affiché sur la console?
EasyPHP 2.0 beta 1 mon code php s'affiche dans ma pagerequete affiche un bouton AouB dans un array qui verifi a chaque ligne
Plus de sujets relatifs à : [API Win32] Rebar qui ne s'affiche pas dans DialogBox


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR