big_dadi_fat | Salut Je débute en api win 32, et j'ai un petit prob avec un exercice. Je veut faire en sorte que si on édite le texte et on ferme le fenetre principal , alors un msgBox s'affiche en disant qu'on a éditer le fenetre . amis le prob c'est que le msgBox s'affiche meme si je né pas éditer le texte . voici le code que j'ai fais
Code :
- #include<windows.h>
- #define L 600 // largeur de la fenetre principale
- #define H 400 // hauteur de la fenetre principale
- #define IDM_QUIT 1 // identificateur du SouMenu Quitter
- // prototype de la procédure
- LRESULT CALLBACK Proc(HWND, UINT, WPARAM, LPARAM);
- HINSTANCE hinst; // hinstance du contrôl d'édition
- // LA FONCTION PRINCIPALE (MAIN) :
- int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- HWND hwnd; // hendle de la fenetre principale
- MSG msg; // variable des messages pour la boucle
- WNDCLASS wc; // structure (class) de la fenetre principale
- HMENU hMenu, hSousMenu; // hendle de menu et sousmenu
- // remplissage de la fenetre ******************************
- wc.style = 0;
- wc.lpfnWndProc = Proc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hinstance;
- wc.hIcon = LoadIcon(NULL, IDI_EXCLAMATION);
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = CreateSolidBrush(RGB(234,235,71));
- wc.lpszMenuName = NULL;
- wc.lpszClassName = "Class";
- // enregistrement de la class ******************************
- if ( !RegisterClass(&wc)) return FALSE;
- // SousMenu Quitter
- hSousMenu = CreateMenu();
- AppendMenu(hSousMenu, MF_STRING, IDM_QUIT, "Quitter" );
- // Menu Fichier
- hMenu = CreateMenu();
- AppendMenu(hMenu, MF_POPUP, (UINT) hSousMenu, "Fichier" );
- // création de la fenetre principale ******************************
- hwnd = CreateWindow("Class", "By Happy Hacker", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, L, H, NULL, hMenu, hinstance, NULL);
- // montrer les fenetres ******************************
- ShowWindow(hwnd, SW_SHOW); // montrer la fenetre principale
- // metre la fenetre principal à jours ******************************
- UpdateWindow(hwnd);
- // la boucle qui tréte les messages ******************************
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
- // LES FONCTIONS :
- LRESULT CALLBACK Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- HWND hEdit; // hendle du contôl d'édition
- switch (uMsg)
- {
- int EditNotChg;
- case WM_CREATE:
- // création du contrôl d'édition
- hwnd = CreateWindow("edit", "Salut tout le monde, je suis : bad_day.", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, L/2-L/4, H/2-H/4, L/2, H/2, hwnd, NULL, hinst, NULL);
- /* la police d'édit: */
- HFONT hFont;
- hFont = (HFONT) GetStockObject(ANSI_FIXED_FONT);
- SendMessage(hEdit, WM_SETFONT, (UINT)hFont, TRUE );
- /* les marges: */
- SendMessage(hEdit, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(5,5));
- return 0;
- // afficher un msgBox quand on quitte en cas d'édition du texte , pour demander la confirmation
- case WM_CLOSE:
- if( EditNotChg || MessageBox(hwnd, "texte modifié. Etes vous sur de vouloir quitter ?", "Question", MB_YESNO | MB_ICONQUESTION) == IDYES )
- DestroyWindow(hwnd);
- return 0;
- case WM_COMMAND:
- // poster la le message quitter au Smenu IDM_QUIT est bien son id
- if( LOWORD(wParam) == IDM_QUIT ) PostMessage(hwnd, WM_CLOSE, 0, 0);
- // verifier si le texte à été éditer ou pas
- if(HIWORD(wParam) == EN_CHANGE ) EditNotChg = FALSE;
- return 0;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- default:
- return DefWindowProc(hwnd, uMsg, wParam, lParam);
- }
- }
|
Merci pour votre aide Message édité par big_dadi_fat le 15-08-2006 à 19:55:04
|