antsite Je me souviens | Salut 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 :
- INITCOMMONCONTROLSEX icex;
- icex.dwSize = sizeof INITCOMMONCONTROLSEX;
- icex.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
- InitCommonControlsEx(&icex);
|
ensuite, appel de la macro DialogBox pour creer et affiche la boite de dialogue :
Code :
- DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC) DlgProc);
|
et enfin creation de la Rebar dans la DialogProc (WM_INITDIALOG) :
Code :
- BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- // ....
- case WM_INITDIALOG:
- // creation de la Rebar
- HWND hwndRebar = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL,
- 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);
- // creation d'un bouton destine a aller dans la rebar
- HWND hButton = CreateWindowEx(WS_EX_TOOLWINDOW, WC_BUTTON, TEXT("test" ), WS_VISIBLE | WS_CHILD, 0, 0, 50, 14, hwndRebar, (HMENU)NULL, hInstance, NULL);
- // creation d'une "Band", conteneur qui sera insere dans la Rebar
- REBARBANDINFO rbBand;
- rbBand.cbSize = sizeof REBARBANDINFO;
- rbBand.fMask = RBBIM_STYLE | RBBIM_TEXT | RBBIM_SIZE | RBBIM_CHILD;
- rbBand.fStyle = RBBS_CHILDEDGE | RBBS_GRIPPERALWAYS;
- rbBand.lpText = TEXT("Font" );
- rbBand.cx = 480;
- rbBand.hwndChild = hButton;
- // ajout de la Band dans la Rebar
- SendMessage(hwndRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);
- return TRUE;
- // ... autres messages
- }
|
ha et puis un extrait du .RC concernant la boite de dialogue
Code :
- IDD_MAIN DIALOGEX 0, 0, 480, 250
- STYLE WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SIZEBOX | DS_SHELLFONT | DS_CENTER
- CAPTION "ColumnReader"
- FONT 8, "MS Shell Dlg"
- BEGIN
- // ... 2 RichEdit controls uniquement ici
- 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
|