Простой пример создания окна с помощью win api на си - win forms
Primary tabs
Forums:
Разберём здесь базовый пример. позже выложу более подробные комментарии кода.
- Log in to post comments
- 13666 reads
Разберём здесь базовый пример. позже выложу более подробные комментарии кода.
vedro-compota
Thu, 10/13/2011 - 13:31
Permalink
А теперь расмотрим конкретый
А теперь расмотрим конкретый пример использования winapi для получения простейшего пользовательского интерфейса -
окна с кнопкой, по нажатии на которую "вываливается " сообщение. (код на языке си) =
#include windows.h> LRESULT CALLBACK MainWinProc(HWND,UINT,WPARAM,LPARAM); #define ID_MYBUTTON 1 /* идентификатор для кнопочки внутри главного окна = определяем этот идентификатор как единицу */ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE qwe,LPSTR qwer, int ss) { /* */ /* создаем и регистрируем класс главного окна */ /* это си код , с использованием структур - читай учебник по си, если не знаешь что это такое*/ WNDCLASS wc; /*объявляем наш класс*/ wc.style=0; /* стиль (поведение) класса окон,*/ wc.lpfnWndProc=MainWinProc; /*процедура обработки событий окна - передаём указатель на функцуию*/ wc.cbClsExtra=0; /*размер дополнительной памяти в системной структуре класса для данных пользователя */ wc.cbWndExtra=0; /* размер дополнительной памяти в системной структуре окна для данных пользователя*/ wc.hInstance=hInst;/*дескриптор модуля (экземпляра программы), в котором реализована процедура обработки - передаём указатель на нашу программу ,полученный из WinMain() */ wc.hIcon=NULL; /* дескриптор иконки окна*/ wc.hCursor=NULL; /*дескриптор курсора мыши для окна */ wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);/* дескриптор "кисточки" для закрашивания фона окна - определяем стиль закрашивания*/ wc.lpszMenuName=NULL;/* имя ресурса, содержащего меню окна*/ wc.lpszClassName="Example_code_win_api_on_c_realization_simple";/* имя класса*/ if (!RegisterClass(&wc)) return FALSE; /* регистрируем класс программы с заполненной структорой -в случае деуспешности последнего действа - возвращаем "наружу" всеми признанный идентификатор неуспешности - false*/ /* создаем главное окно и отображаем его - передаём 11 параметров*/ HWND hMainWnd=CreateWindow("Example_code_win_api_on_c_realization_simple", /*имя класса */ "EXAMPLE WIN API C",/*имя окна (заголовок) */ WS_OVERLAPPEDWINDOW, /*стиль (поведение) окна = стиль WS_OVERLAPPEDWINDOW дарует окну стандартные в числе прочего стандартные кнопки свёртывания - развёртывания и заголовок */ /*CW_USEDEFAULT - этот параметр предлагает операционной системе виндоус самой определиться со значением ниже перечисленных характеристик окна.*/ CW_USEDEFAULT, /*горизонтальная позиция окна на экране - точка левого верхнего угла окна - х-координата */ CW_USEDEFAULT, /*вертикальная позиция окна на экране - точка левого верхнего угла окна - у-координата - от нее откладываются длина и высота*/ CW_USEDEFAULT, /*ширина окна */ CW_USEDEFAULT, /*высота окна */ NULL, /*дескриптор родительского окна */ NULL, /*дескриптор меню */ hInst, /* дескриптор экземпляра программы */ NULL /*указатель на какую-нибудь ерунду (по другой версии - "указатель на данные создания окна")*/ ); if (!hMainWnd) return FALSE; /* если создать окно почему-то не удалось - не станем скрывать это!))*/ ShowWindow(hMainWnd,ss); /* показывает окно, использует только что заполненную стурктуру окна и, в качестве второго параметра - переменну полученную от системы через WinMain(), которая дополнительно описывает формат опять же окна. */ UpdateWindow(hMainWnd); /* Модифицирует клиентскую область окна*/ MSG msg; /* цикл обработки событий */ while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } /* процедура обработки сообщений для главного окна */ LRESULT CALLBACK MainWinProc(HWND hw,UINT msg,WPARAM wp,LPARAM lp) { switch (msg) { case WM_CREATE: /* при создании окна внедряем в него кнопочку */ CreateWindow("button","Этотексткнопки",WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE, 5,5,100,20,hw,(HMENU)ID_MYBUTTON,NULL,NULL); /* стиль WS_CHILD означает, что это дочернее окно и для него вместо дескриптора меню будет передан целочисленный идентификатор, который будет использоваться дочерним окном для оповещения родительского окна через WM_COMMAND */ return 0; case WM_COMMAND: /* нажата наша кнопочка? */ if ((HIWORD(wp)==0) && (LOWORD(wp)==ID_MYBUTTON)) MessageBox(hw,"Вы успешно нажали на кнопку!","Срочное сообщение",MB_OK|MB_ICONWARNING); return 0; case WM_DESTROY: /* пользователь закрыл окно, программа может завершаться */ PostQuitMessage(0); return 0; } return DefWindowProc(hw,msg,wp,lp); }------------------------
_____________
матфак вгу и остальная классика =)
vedro-compota
Wed, 10/12/2011 - 20:14
Permalink
для справки =
для справки =
структура WNDCLASS=
UINT style - стиль (поведение) класса окон, WNDPROC lpfnWndProc - процедура обработки событий окна, int cbClsExtra - размер дополнительной памяти в системной структуре класса для данных пользователя, int cbWndExtra - размер дополнительной памяти в системной структуре окна для данных пользователя, HINSTANCE hInstance - дескриптор модуля (экземпляра программы), в котором реализована процедура обработки, HICON hIcon - дескриптор иконки окна, HCURSOR hCursor - дескриптор курсора мыши для окна, HBRUSH hbrBackground - дескриптор "кисточки" для закрашивания фона окна, LPCSTR lpszMenuName - имя ресурса, содержащего меню окна, LPCSTR lpszClassName - имя класса.Для создания окна вызывается функция:
_____________
матфак вгу и остальная классика =)