blob: 462bbe324a3202a3a0d9f63ad30ea652768cc297 [file] [log] [blame]
Alexandre Julliard902da691995-11-05 14:39:02 +00001#include <windows.h>
Alexandre Julliardade697e1995-11-26 13:59:11 +00002#include <commdlg.h>
Pavel Roskin0dddc091999-03-28 12:40:43 +00003
4typedef struct
5{
6 HANDLE hInstance;
7 HWND hMainWnd;
8 HMENU hMainMenu;
9} GLOBALS;
10
11GLOBALS Globals;
Alexandre Julliardade697e1995-11-26 13:59:11 +000012
13BOOL FileOpen(HWND hWnd)
14{
15 char filename[80] = "test.c";
16 OPENFILENAME ofn = { sizeof(OPENFILENAME),
17 hWnd, NULL, "C code\0*.c\0", NULL, 0, 0, filename, 80,
18 NULL, 0, NULL, NULL, OFN_CREATEPROMPT |
19 OFN_SHOWHELP, 0, 0, NULL, 0, NULL };
20 return GetOpenFileName(&ofn);
21}
Alexandre Julliard902da691995-11-05 14:39:02 +000022
Pavel Roskin734247b1999-04-03 13:52:04 +000023LRESULT CALLBACK DlgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
Alexandre Julliard902da691995-11-05 14:39:02 +000024{
Pavel Roskin734247b1999-04-03 13:52:04 +000025 switch(msg)
26 {
27 case WM_INITDIALOG:
28 break;
29 case WM_COMMAND:
30 switch (wParam)
31 {
32 case 100:
33 EndDialog(hWnd, 100);
34 return TRUE;
35 }
36 }
37 return FALSE;
Alexandre Julliard902da691995-11-05 14:39:02 +000038}
39
Pavel Roskin734247b1999-04-03 13:52:04 +000040LRESULT CALLBACK WndProc (HWND wnd, UINT msg, WPARAM w, LPARAM l)
Alexandre Julliard902da691995-11-05 14:39:02 +000041{
42 switch (msg){
43
44 case WM_COMMAND:
45 switch(w){
46 case 100:
Pavel Roskin0dddc091999-03-28 12:40:43 +000047 DialogBox(Globals.hInstance,
48 "DIADEMO", wnd,
49 (DLGPROC)DlgProc);
Alexandre Julliard902da691995-11-05 14:39:02 +000050 return 0;
51 case 101:
52 {
Pavel Roskin0dddc091999-03-28 12:40:43 +000053 HDC hdc, hMemDC;
54 HBITMAP hBitmap, hPrevBitmap;
55 BITMAP bmp;
56
57 hBitmap = LoadBitmapA (Globals.hInstance, "BITDEMO");
58 hdc = GetDC (wnd);
59 hMemDC = CreateCompatibleDC (hdc);
60 hPrevBitmap = SelectObject (hMemDC, hBitmap);
61 GetObjectA (hBitmap, sizeof(BITMAP), &bmp);
62 BitBlt (hdc, 0, 0, bmp.bmWidth, bmp.bmHeight,
63 hMemDC, 0, 0, SRCCOPY);
64 SelectObject (hMemDC, hPrevBitmap);
65 DeleteDC (hMemDC);
66 ReleaseDC (wnd, hdc);
Alexandre Julliard902da691995-11-05 14:39:02 +000067 return 0;
68 }
Alexandre Julliardade697e1995-11-26 13:59:11 +000069 case 102:
70 FileOpen(wnd);
71 return 0;
Alexandre Julliard902da691995-11-05 14:39:02 +000072 default:
73 return DefWindowProc (wnd, msg, w, l);
74 }
75 case WM_DESTROY:
76 PostQuitMessage (0);
77 break;
78
79 default:
80 return DefWindowProc (wnd, msg, w, l);
81 }
82 return 0l;
83}
84
85int PASCAL WinMain (HANDLE inst, HANDLE prev, LPSTR cmdline, int show)
86{
Alexandre Julliard902da691995-11-05 14:39:02 +000087 MSG msg;
88 WNDCLASS class;
Alexandre Julliard1285c2f1996-05-06 16:06:24 +000089 char className[] = "class"; /* To make sure className >= 0x10000 */
90 char winName[] = "Test app";
Alexandre Julliard902da691995-11-05 14:39:02 +000091
Pavel Roskin0dddc091999-03-28 12:40:43 +000092 Globals.hInstance = inst;
Alexandre Julliard902da691995-11-05 14:39:02 +000093 if (!prev){
94 class.style = CS_HREDRAW | CS_VREDRAW;
95 class.lpfnWndProc = WndProc;
96 class.cbClsExtra = 0;
97 class.cbWndExtra = 0;
98 class.hInstance = inst;
99 class.hIcon = LoadIcon (0, IDI_APPLICATION);
100 class.hCursor = LoadCursor (0, IDC_ARROW);
101 class.hbrBackground = GetStockObject (WHITE_BRUSH);
102 class.lpszMenuName = 0;
Pavel Roskin734247b1999-04-03 13:52:04 +0000103 class.lpszClassName = className;
Alexandre Julliard902da691995-11-05 14:39:02 +0000104 }
105 if (!RegisterClass (&class))
106 return FALSE;
107
Pavel Roskin0dddc091999-03-28 12:40:43 +0000108 Globals.hMainWnd = CreateWindow (className, winName, WS_OVERLAPPEDWINDOW,
Alexandre Julliard902da691995-11-05 14:39:02 +0000109 CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0,
Alexandre Julliardd4719651995-12-12 18:49:11 +0000110 LoadMenu(inst,"MAIN"), inst, 0);
Pavel Roskin0dddc091999-03-28 12:40:43 +0000111 ShowWindow (Globals.hMainWnd, show);
112 UpdateWindow (Globals.hMainWnd);
Alexandre Julliard902da691995-11-05 14:39:02 +0000113
114 while (GetMessage (&msg, 0, 0, 0)){
115 TranslateMessage (&msg);
116 DispatchMessage (&msg);
117 }
118 return 0;
119}