Как создать простое Виндовское окно с помощью DevC++?
Хотелось бы создать Диалоговое окно Виндовс с надписью "HelloWorld!" желательно с пояснениями
Хотелось бы создать Диалоговое окно Виндовс с надписью "HelloWorld!" желательно с пояснениями
#include
char WindowClass[] = "win32app";
char Title[] = "Hello";
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE Instance, HINSTANCE, LPSTR, int CmdShow) {
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = Instance;
wcex.hIcon = LoadIcon(Instance, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = WindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);
if (!RegisterClassEx(&wcex)) {
MessageBox(NULL, "Call to RegisterClassEx failed!", "Error", 0);
return 1;
}
hInst = Instance;
HWND hWnd = CreateWindow(WindowClass, Title, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, 500, 100, NULL, NULL, Instance, NULL);
if (!hWnd) {
MessageBox(NULL, "Call to CreateWindow failed!", "Error", 0);
return 1;
}
ShowWindow(hWnd, CmdShow);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps;
HDC hdc;
char greeting[] = "Hello, World!";
switch (message) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 5, 5, greeting, sizeof(greeting));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}
Пояснения: http://msdn.microsoft.com/ru-ru/library/bb384843
> Саша Коньков
> Учи WinAPI.
Адепты пюревасиков учат API, вместо того, чтобы просто почитать документацию по API?
Вообще, странно, WinAPI надо учить, а .NET -- это "очередная поделка микросовта" (С) Саша Коньков. Будто и то и другое не является разработкой MicroSoft.
> А лучше на PureBasic.
Ага, чтобы потом учить API. А почему именно пюревасик, а, к примеру, не тикль, в нем еще короче:
pack [ttk::label .l -text "Hello, World!"] -pady 5
pack [ttk::button .b -text "Exit"] -pady 5
И к тому же надпись "Hello, World!" присутствует и кнопка для выхода, в отличие от примера на пюревасике, в котором голое окно. И при этом без всяких ручных циклов обработки сообщений -- в этом плане на пюревасике, как на якобы высокоуровневом языке, приходится делать "закат солнца руками", что говорит об убогости его стандартной библиотеки для создания GUI-приложений.
Учи WinAPI.
В частности изучи функцию CreateWindowEx и все что с ней связанно.
А лучше на PureBasic. http://nnm-club.ru/forum/viewtopic.php?t=634155
Вот код окна с обработчиком события его закрытия.
OpenWindow(0, 0,0,200,100,"Окно", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow