1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| LRESULT CALLBACK ChildProc(HWND hWnd, UINT mes, WPARAM wParam, LPARAM lParam)
{
switch(mes)
{
case WM_CREATE:
CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD|WS_VSCROLL|ES_MULTILINE|WS_VISIBLE|ES_AUTOVSCROLL|ES_WANTRETURN, 0, 0, 0, 0, hWnd, NULL, hInst, NULL);
ShowWindow(hWnd, SW_SHOWNORMAL);
SetFocus(hWnd);
return TRUE;
default:
return DefWindowProc(hWnd, mes, wParam, lParam);
}
}
// fonction de la fenetre
LRESULT CALLBACK MainProc(HWND hWnd, UINT mes, WPARAM wParam, LPARAM lParam)
{
switch(mes)
{
// creation de la fenetre
case WM_CREATE:
// configuration fils
CLIENTCREATESTRUCT ccs;
ccs.hWindowMenu = NULL;
ccs.idFirstChild = 200;
clientHwnd = CreateWindowEx(0, "MDICLIENT", NULL, WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, (HMENU)NULL, hInst, (void*)&ccs);
// definition classe du fils
WNDCLASSEX clientWnd;
clientWnd.cbClsExtra = 0;
clientWnd.cbSize = sizeof(WNDCLASSEX);
clientWnd.cbWndExtra = 0;
clientWnd.hbrBackground = GetSysColorBrush(COLOR_BACKGROUND);
clientWnd.hCursor = LoadCursor(NULL, IDC_ARROW);
clientWnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
clientWnd.hIconSm = clientWnd.hIcon;
clientWnd.hInstance = hInst;
clientWnd.lpfnWndProc = ChildProc;
clientWnd.lpszClassName = "Editor";
clientWnd.lpszMenuName = NULL;
clientWnd.style = CS_DBLCLKS|CS_PARENTDC;
RegisterClassEx(&clientWnd);
return TRUE;
// demande de fermeture application
case WM_CLOSE:
if(MessageBox(hWnd, "Etes-vous sur de vouloir quitter ?", "Quitter ?", MB_ICONINFORMATION|MB_YESNO) == IDYES)
PostQuitMessage(0);
return 0;
// selection item
case WM_COMMAND:
{
switch(wParam)
{
// Quitter
case ID_MAIN_QUITTER:
// demande confirmation
if(MessageBox(hWnd, "Etes-vous sur de vouloir quitter le programme ?", "Quitter ?", MB_ICONINFORMATION|MB_YESNO) == IDYES)
PostQuitMessage(0); // fin du programme
return TRUE;
// ancien prog
case ID_MAIN_OPEN:
DialogBox(hInst, MAKEINTRESOURCE(IDD_MAIN), hWnd, OpenProc);
return TRUE;
// menu "A propos"
case ID_MAIN_INFO:
DialogBox(hInst, MAKEINTRESOURCE(IDD_INFO), hWnd, NULL);
return TRUE;
// nouveau projet
case ID_MAIN_NEW:
if(!CreateMDIWindow("Editor", "Untitled*", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, clientHwnd, hInst, NULL))
MessageBox(hWnd, "Erreur", "Erreur", MB_OK);
return TRUE;
}
}
default:
return DefWindowProc(hWnd, mes, wParam, lParam);
}
}
// fonction WinMain (point d'entrée du programme)
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// definition variable
WNDCLASSEX fenetre; // class de notre fenetre
HWND f_hWnd; // HWND de la fenetre
MSG msg; // variable de message
hInst = hInstance; // hinstance
// definition de notre class fenetre
fenetre.cbSize = sizeof(WNDCLASSEX);
fenetre.style = CS_HREDRAW | CS_VREDRAW;
fenetre.lpfnWndProc = MainProc;
fenetre.cbClsExtra = 0;
fenetre.cbWndExtra = 0;
fenetre.hInstance = hInstance;
fenetre.hIcon = LoadIcon(NULL, IDI_APPLICATION);
fenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
fenetre.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW+2);
fenetre.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
fenetre.lpszClassName = "std";
fenetre.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&fenetre); // enregistrement de la class
// creation de la fenetre
f_hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "std", "AccessGen", WS_OVERLAPPEDWINDOW, 0, 0, 800, 600, NULL, NULL, hInstance, NULL);
ShowWindow(f_hWnd, SW_SHOW);
SetFocus(f_hWnd); // donne focus
// reception des messages
while(GetMessage(&msg, NULL, 0, 0) == TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0; // fin app
} |