ulvis.paste.net

Paste Search Dynamic
Recent pastes
урок по WINAPI C++
  1. #include<windows.h> // подключаем библиотеку виндовс
  2.  
  3. bool RegClass(WNDPROC,LPCTSTR,UINT); // обьявляем прототипы функций они нужны для корректного использования во всей программе
  4. LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
  5.  
  6. HINSTANCE hInstance;//объявляем дескриптор(индефигатор) окна
  7. char szClassName[] = "myClass";// имя класса в системе
  8.  
  9. /////////////////////////ГЛАВНАЯ ФУНКЦИЯ ПРОГРАММЫ//////////////////////////////////////////
  10. int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
  11. {
  12. MSG msg;//Сообщения отслеживаемые системой
  13. HWND hwnd;//само окно которое мы будем регестрировать и создовать!
  14.                                 if(!RegClass(WndProc,szClassName,COLOR_WINDOW))//Зарегистрируем главное окно нашей системы в программе
  15.                                 {                                                                                               //первый параметр это отсылка на обработку сообщений (например создать окно )
  16.                                                                                                                            //второй имя регестрируемого класса
  17.                                                                                    //и третий цвет окна , я взял стандарт - белыйж
  18.                                 return false;
  19.                                 }
  20.                                 //СОЗДАНИЕ ГЛАВНОГО ОКНА ///////
  21. hwnd = CreateWindow(szClassName//Имя класса нашего окна
  22.                                         ,"Hello world"//Имя нашего окна (что будет написано в заголовке)
  23.                                         ,WS_VISIBLE | WS_OVERLAPPEDWINDOW,//СТИЛи нашего окна (начинаются с перфикса WS от Window Style)
  24.                                         //WS_VISIBLE значит что окно видимое и распахнутое  а WS_OVERLAPPEDWINDOW то что оно стандартного вида
  25.                                         0,0// эти 2 нуля обозначают координаты окна на рабочем столе (Х,У) (если стоит 0 0 то окно будет в левом верхнем углу)
  26.                                         ,500,500// эти 2 значения ширина и высота окна
  27.                                         ,0//это дескриптор окна создателя , но у нас главное окно так что ставим 0
  28.                                         ,0//это меню нашего окна на данном этапе оно не нужно
  29.                                         ,hInstance//Собственно дескриптор нашего окна
  30.                                         ,0//Дополнительный параметр
  31.                                         );
  32.                                 if(!hwnd)// проверяем ..... создалось окно или нет
  33.                                 {
  34.                                 return false;
  35.                                 }
  36. while(GetMessage(&msg,0,0,0))//запускаем цикл прослушки сообщений
  37. {
  38. TranslateMessage(&msg);//транслируем сообщения т.е. если у вас есть текстовый редактор на форме то эта функция позволяет писать в нем
  39. DispatchMessage(&msg);//обрабатываем сообщения
  40. }
  41. return msg.wParam;//возвращаем старший параметр сообщения
  42. }
  43. //////////////////////////функция регистрации нашего окна//////////////
  44. bool RegClass(WNDPROC proc,LPCTSTR szName,UINT background)//Первый параметр это отсылка на обработку сообщений
  45. {                                                                                                               //второй имя нашего класса
  46.                                                             //третий это цвет нашего окна
  47. WNDCLASS wc;//объявляем наше будущее окно
  48. wc.style = wc.cbClsExtra =wc.cbWndExtra = 0; //стиль и оба доп. параметров ставим в 0
  49. wc.lpfnWndProc = proc;//отсылка на WNDPROC
  50. wc.hInstance = hInstance;//дескриптор
  51. wc.hIcon = LoadIcon(null,IDI_APPLICATION);//загружаем стандартную иконку
  52. wc.hCursor = LoadCursor(null,IDC_ARROW);//загружаем стандартный курсор
  53. wc.lpszMenuName = null;//дополнитеньное меню ставим в ноль
  54. wc.lpszClassName = szName;//имя класса
  55. wc.hbrBackground = (HBRUSH)(background+1);//цвет нашего окна
  56. return (RegisterClass(&wc));//возвращаем наше зарегистрируемое окно
  57. }
  58.  
  59. ////////////////////////////ФУНКЦИЯ ОБРАБОТКИ СООБЩЕНИЙ///////////////////////
  60.  
  61. LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
  62. {
  63.  
  64.         static HWND button;//////Объявим нашу кнопку
  65.  
  66. switch(msg)////////запускаем цикл проверки сообщений
  67. {
  68. case WM_CREATE:///что бедет выполнятся при создании (запуске) приложения
  69.         //создается кнопка как окно
  70.         button = CreateWindow("button"//собственно класс нашего окна(кнопки)
  71.                 ,"button"//что будет написсано на кнопке
  72.                 ,WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,//стили нашей кнопки
  73.                 //WS_VISIBLE сделаем кнопку видимой и распахнутой
  74.                 //WS_CHILD сделаем нашу кнопку дочерней главному окну hwnd (тоесть наша кнопка зависит от гл.окна)
  75.                 //WS_DEFPUSHBUTTON сообщим что наша кнопка будет выглядеть как кнопка , а не как обычное окно
  76.                 250,250,// собсвенно координаты в окне
  77.                 80,70,//ширина высота
  78.                 hwnd,//окно родителя
  79.                 0,//меню
  80.                 hInstance,//дескриптор
  81.                 0//доп параметр
  82.                 );
  83.         break;
  84.  
  85. case WM_COMMAND: //команды от пользователя т.е. что ты нажал
  86.         if((HWND)lParam == button)//проверяем нажата ли кнопка button (Псевдокод будет таким если ((в окне)передался младший параметр и он равен кнопке)
  87.         {
  88.         MessageBox(0,"OKAY!!!!!!!!!!","",0);//выводим сообщение
  89.         MessageBeep(-1);//выводим звук
  90.         }
  91.        
  92.         break;
  93.  
  94. case WM_DESTROY://что делается при уничтожении окна
  95.         PostQuitMessage(0);//освободим сообщения
  96.         return 0 ;
  97.         break;
  98. }
  99. return DefWindowProc(hwnd,msg,wParam,lParam);//возвратим освобожденный процесс
  100. }
Parsed in 0.055 seconds