Accueil > Forum > > > > Où passent mes tabulations...
Où passent mes tabulations...
lundi 10 janvier 2005 à 03:39:28 |
Où passent mes tabulations...

Nebula
|
Bonjour,
En utilisant des richedits dans une fenêtre créée avec CreateWindowEx
et dont les messages sont traités avec IsDialogMessage, je me suis
aperçu que la touche "tabulation" n'était plus traitée ni par les
richedits, ni par IsDialogMessage. J'ai alors pensé résoudre le
problème en traitant WM_GETDLGCODE et en retournant DLGC_WANTALLKEYS,
ce qui permet effectivement à mes richedits de retrouver leur
comportement habituel.
Mais (et c'est là que çà devient amusant), la procédure originale des
richedits retourne déjà cette valeur... J'ai alors fait le petit
programme de test suivant, qui met en avant ce problème :
#include <windows.h>
#include <richedit.h>
static HINSTANCE hInstance = NULL;
static WNDPROC DefRichProcA = NULL;
static WNDPROC DefRichProcB = NULL;
static LRESULT CALLBACK RichWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_GETDLGCODE:
/* on
renvoie 143, soit DLGC_WANTARROWS | DLGC_WANTTAB | DLGC_WANTALLKEYS |
DLGC_HASSETSEL | DLGC_WANTCHARS */
return 143;
default:
return DefRichProcA(hWnd, uMsg, wParam, lParam);
}
}
static LRESULT CALLBACK RichWndProcB(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_GETDLGCODE:
/* ceci a le même effet que l'autre routine, et renvoie 143 aussi */
return CallWindowProc(DefRichProcB, hWnd, uMsg, wParam, lParam);
default:
return DefRichProcB(hWnd, uMsg, wParam, lParam);
}
}
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
HWND hRich;
case WM_CREATE:
hRich =
CreateWindowEx(WS_EX_CLIENTEDGE, RICHEDIT_CLASS, "Tabulez-moi, çà
marche !", WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL
| ES_DISABLENOSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE |
ES_WANTRETURN, 10, 10, 280, 350, hWnd, NULL, hInstance, NULL);
DefRichProcA = (WNDPROC) GetWindowLong(hRich, GWL_WNDPROC);
SetWindowLong(hRich, GWL_WNDPROC, (LONG) RichWndProcA);
hRich =
CreateWindowEx(WS_EX_CLIENTEDGE, RICHEDIT_CLASS, "Tabulez-moi, çà
marche pas...", WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_HSCROLL |
WS_VSCROLL | ES_DISABLENOSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL |
ES_MULTILINE | ES_WANTRETURN, 300, 10, 280, 350, hWnd, NULL, hInstance,
NULL);
DefRichProcB = (WNDPROC) GetWindowLong(hRich, GWL_WNDPROC);
SetWindowLong(hRich, GWL_WNDPROC, (LONG) RichWndProcB);
return 0;
case WM_CLOSE:
DestroyWindow(hWnd);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow) {
WNDCLASSEX wc;
HWND hWnd;
MSG msg;
LoadLibrary("riched20.dll");
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_PARENTDC;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance = hInst;
wc.hIcon = LoadImage(NULL, MAKEINTRESOURCE(OIC_INFORMATION), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR | LR_SHARED);
wc.hCursor =
LoadImage(NULL, MAKEINTRESOURCE(OCR_NORMAL), IMAGE_CURSOR, 0, 0,
LR_DEFAULTCOLOR | LR_DEFAULTSIZE | LR_SHARED);
wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "Bug tabulations";
wc.hIconSm = LoadImage(NULL, MAKEINTRESOURCE(OIC_INFORMATION), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR | LR_SHARED);
RegisterClassEx(&wc);
hWnd =
CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CONTROLPARENT, "Bug
tabulations", "Bug tabulations", (WS_CLIPSIBLINGS |
WS_OVERLAPPEDWINDOW) ^ (WS_SIZEBOX | WS_MAXIMIZEBOX), CW_USEDEFAULT,
CW_USEDEFAULT, 600, 400, NULL, NULL, wc.hInstance, NULL);
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0) > 0) {
if (IsDialogMessage(hWnd, &msg) == 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
Le premier richedit fonctionne parfaitement, alors que le deuxième non.
Quelqu'un a t'il une explication à ce comportement des plus étranges,
constaté sous MinGW et MSVC ?
PS : le code est disponible sous une forme plus lisible (coloré et indenté) ici : http://athanatos.free.fr/temp/tabulations.htm
|
|
lundi 10 janvier 2005 à 10:16:23 |
Re : Où passent mes tabulations...

BruNews
|
Que fait "IsDialogMessage(hWnd, &msg)" dans ton code ?
ciao... BruNews, MVP VC++
|
|
lundi 10 janvier 2005 à 11:09:34 |
Re : Où passent mes tabulations...

Nebula
|
Là pas grand chose, ce n'est évidemment un exemple minimaliste... Dans
le véritable code, elle sert à fournir la même interface "clavier" à ma
fenêtre qu'une dialog. Tu vas encore me dire d'utiliser des dialogs,
mais j'ai essayé et cela ne me convient pas vraiment : j'aime pas du
tout la syntaxe des .rc, et les templates en mémoire c'est une horreur
(exemple sans frais : http://athanatos.free.fr/temp/dlg.htm) :-/
De plus, les dialog étant "interprétées" par Windows à coups de
CreateWindowEx (selon l'aide), il doit bien y avoir moyen de gérer la
même chose par l'API... Non ?
|
|
Cette discussion est classée dans : hwnd, ws, wparam, wc, wndproc
Répondre à ce message
Sujets en rapport avec ce message
Pb sur un ptit bout de prog en DirectX.... [ par Haldwin ]
Salut a tous....Voila j'ai deux ptits pbs quand je lance cette appli ci-dessous... (VC++)La première est q'une fois sur deux ma variable hWnd apres le
thread sur WndProc [ par kidpigeyre ]
G une fonction WndProc chargé de réaliser tout mon programme (application GUI) (avec fenetre windows) et jmerai pouvoir faire un thread de cette fonct
Edit Control [ par cybermatthieu ]
Bonjours,Je suis en Train d'apprendre comment progrmmer en Win32 avec la Class Windows.h. Ce petit programme ne fait q'afficher des caracter mais j'ai
ouvrir une 2eme fenetre avec editbox et tout et tout, c'est possible? [ par Arnaud16022 ]
Hello tout le monde!je voudrais mettre un bouton dans une fenetre (ca c'est facile), mais seulement quand on clique dessus un autre fenetre s'ouvre, a
Savoir quand on clique sur un bouton [ par cyberlewis ]
Slt à tous, Voilà j'ai un code que j'ai fait, et normalement si on cliques sur les boutons, ça lance la fonction Encode() ou Decode() en fonction du b
Mélange entre C++ et Win32 [ par vecchio56 ]
J'ai décidé d'encapsuler mes fenêtres dans des classes, mais je me trouve confronté à un problème: en gros je n'arrive pas à changer de WndProc en uti
pb de CreateWindowEx [ par graall ]
Bonjour,j'ai un pb dans une API ://---------------------------------------// dans le fichier mainlib.hpp ://---------------------------------------
Creer un controle standard API Win32 [ par Kazuya ]
Bojour,Alors voila, j'essaie de me mettre aux API win32 et la j'ai un petit probleme, lorsque j'affiche un controle dans ma feuille principale, il sci
Problème de linker dans programme de base. [ par vith17 ]
Bonjour,J'ai tapé le code suivant sous Dev-C++. Lorsque je lance la compilation, il me revoie l'erreur suivante : [Linker error] undefined referenc
c++ API Windows : sous classement de fenetre dans une classe [ par _Jonathan ]
Bonjour, je cherche à créer un controle de type Edit en utilisant une classe. Le probleme, c'est que je souhaite redéfinir la procedure callback du co
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|