Можно ли создать полноценный GUI - C (СИ)
Формулировка задачи:
Мне стало интересно, можно ли создавать программы на C с полноценным GUI, и какими средствами?
Заранее спасибо)
Решение задачи: «Можно ли создать полноценный GUI»
textual
Листинг программы
#define WIN32_LEAN_AND_MEAN /* speed up compilations */ #include <windows.h> #include <windowsx.h> #include <commctrl.h> #include <tchar.h> #include "main.h" #define NELEMS(a) (sizeof(a) / sizeof((a)[0])) static LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM); static void Main_OnPaint(HWND); static void Main_OnCommand(HWND, int, HWND, UINT); static void Main_OnDestroy(HWND); static LRESULT WINAPI AboutDlgProc(HWND, UINT, WPARAM, LPARAM); static HANDLE ghInstance; int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { INITCOMMONCONTROLSEX icc; WNDCLASS wc; HWND hwnd; MSG msg; ghInstance = hInstance; icc.dwSize = sizeof(icc); icc.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&icc); wc.lpszClassName = _T("wwClass"); wc.lpfnWndProc = MainWndProc; wc.style = CS_OWNDC|CS_VREDRAW|CS_HREDRAW; wc.hInstance = ghInstance; wc.hIcon = LoadIcon(ghInstance, MAKEINTRESOURCE(IDR_ICO_MAIN)); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MNU_MAIN); wc.cbClsExtra = 0; wc.cbWndExtra = 0; if (!RegisterClass(&wc)) return 1; hwnd = CreateWindow(_T("wwClass"), _T("ww Program"), WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, ghInstance, NULL ); if (!hwnd) return 1; ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); #if 0 for (;;) { BOOL fRet = GetMessage(&msg, NULL, 0, 0); if (fRet == -1) /* Error */ { __debugbreak(); return -1; } else if (fRet == 0) /* WM_QUIT */ { break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } #else while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } #endif return msg.wParam; } static LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { HANDLE_MSG(hwnd, WM_PAINT, Main_OnPaint); HANDLE_MSG(hwnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hwnd, WM_DESTROY, Main_OnDestroy); default: return DefWindowProc(hwnd, msg, wParam, lParam); } } static void Main_OnPaint(HWND hwnd) { PAINTSTRUCT ps; RECT rc; BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rc); DrawText(ps.hdc, _T("Hello, World!"), -1, &rc, DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd, &ps); } static void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { case IDM_ABOUT: DialogBox(ghInstance, MAKEINTRESOURCE(DLG_ABOUT), hwnd, (DLGPROC)AboutDlgProc); } } static void Main_OnDestroy(HWND hwnd) { PostQuitMessage(0); } static LRESULT CALLBACK AboutDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: switch (wParam) { case IDOK: case IDCANCEL: EndDialog(hDlg, TRUE); return TRUE; } break; } return FALSE; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д