Այսօր մենք կսետղցենք այսպիսի պատուհան

Մեր նայաց ծրագիրը կարող եք բեռնավորել(քաշել) ստեղից http://ifolder.ru/14252971
Windows- ի ծրագրավորման հիմունքներ
Մինչև որ մենք կանցնենք գրաֆիկաի ծրագրավորման Directx – ի օգնությամբ,մեզ անհրաժեշտ է ստեղծել ծրագրի կարկաս , որը հանդիսանում է մակերես 3D – ի դուրս բերմանը.Ստեղծելով ժրագրի կարկաս մենք կարող ենք անցնել գրաֆիկաի ծրագրավորմանը նկարելով տարբեր 3D- օբեկտներ.
Windows-ի ընդհանուր հաղորդագրության մոդել
Windows-ը շատ հետքաքրքիր օպեռացիոն համակարգ է և բոլոր ծրագրերի հետ շփումը կառուցվում է իրադարձությունների մոդելով.Ցանկացած պատուհան իր գոյության ժամանակ շփվում է Windows-ի հետ հահորդագրություններով.
Այսպիսի հաղորդագրությունները կարողեն լինել անվերջ.Որպեսզի սիստեմացնենկ նրանց, գոյություն ունի իրադարձությունների հերթ, որը կատարվում է հասարակ ցիկլով.Ամեն մի ստացաց հաղորդագրություն սպասում է իր հերթին մշակման համար, որից հետո հանվում է Windows-ի օպեռացիոն համակարգով.Քանի որ Windows-ը շատ մեծ և բազմակարգանի օպեռացիոն համակարգ է, ապա ծրագրերը ինչ որ մի ժամանակաշրջանում կարող են լինել շատ,նշանակում է , և ստացող հաղորդագրությունները նոյնպես.
Նկ1 վրա ցույց է տրված ծրագրի իրադարձությունների համագործակցություն.

Իրադարձությունների մոդելից դուրս է գալի որ մեզ անհրաժեշտ է ստեղծել հաղորդագրությունների մշակող սարք.Սկզբից մենք կստեղծենք WinMain ( )ֆունկցիա որի մեջ կատարվում է պատուհանի ստեղծումը և հաղորդագրությունների մշակում.Այս պատճառով սկզբից մենք կստեղծենկ WinMain ( ) ֆունկցիա, որի մեջ կնկարագրենկ windowsclass դասս(class), որի մեջ ցույց կտանկ պատուհանի չափը,ձևը և ֆոնը.
Հետո մենք կստեղծենք պատուհան CreateWindowEx ( ) ֆունկցիայի օգնությամբ.Հետո կգրանցենք, և վերջում կստեղծենք իրադարձությունների մշակող սարք.
Գլխավոր WinMain ( ) ֆունկցիա
Առաջինը մենք պետկ է միացնենկ գլխավոր վերնագրի windows.h ֆաիլ.
#include <windows.h>
Հետո գալիս է գլխավոր մուտքի ֆունկցիա բոլոր Windows-ի հավելվածների(приложение) համար:WinMain ( ) որի պրոտոտիպը ունի հետևյալ տեսք
Int WINAPI WinMain (
HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
Int ncmdshow )
WinMain ( ) ֆունկցիան ունի հետևյալ պարամետրեր.
Hinstance – դա ստեղծվող պատուհանի դեսկրիպտոր, այսինքն handle.Դա կարելի է ասել ձեր ստեղծվող պատուհանի նշանը.
Hprevinstance – այս պարամետրը արդեն չի օգտագործվում և միշտ ստանում է 0.
Lpcmdline – ցուցիչ կոմանդաին տողի վրա.
Ncmdshow – այս նշանակությունը ցույց է տալիս, ինչպես է ստեղծվող պատուհանը ցույց է տրվելու մոնիտորի էկրանի վրա ստեղծման ժամանակ.
windowsclass –ի դասի պարզաբանում
Հետո մեզ անհրաժեշտ է ստեղծել windowsclass դաս.Դաս – դա այն է որ մեզ տալիս է տարբերել պատուհանի տեսքը և նշանակությունը.Հաճախ ասում են որ պատուհանները իրարից տարբերվում են դասերով.Windows-ը արդեն ունի որոշված դասեր և մնում է պահպանել ինֆորմացիա windowsclass – ի դասի ստեղծումը WNDCLASSEX ստրուկտուրայում.
WNDCLASSEX windowsclass // մեր դասը(class)
Իսկ հիմա կնաենք WNDCLASSEX ստրուկտուրա, որը անհրաժեշտ է պատուհանի ստեղծման համար:
typedef struct {
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
}WNDCLASSEX, *PWNDCLASSEX;
Ստրուկտուրան ունի հետևյալ պարամետրերը.
cbSize – դա ստեղծվող ստրուկտուրաի չափը, windowclass.cbSize = sizeof ( windowclass ),
եթե մոռացելեք sizeof ( ) ֆունկցիայով մենք ստանում ենք ինչ որ մի բանի չափ.
Style – ունի պատուհանի ձևի տարբեր դրոշներ որոնց կարելի է կոմբինացնել լոգիկ ИЛИ “|” , լրացնում ենք style տող:
windowsclass.style = CS_HREDRAW | CS_VREDRAW;
Կոմբինացնելով տարբեր դրոշներ.Ուսումնասիրենք օգտագործվող դրոշներ.Եթե ուզում եք իմանալ ավելին ապա դուք կարող եք դիմել Win32Api.
CS_VREDRAW - եթե պատուհանի բարձրությունը փոխվում է կամ պատուհանը տեղափոխվել է ապա անհրաժեշտ է պատուհանը վերանկարել.
CS_HREDRAW – եթե պատուհանի լայնությունը փոխվում է կամ պատուհանը տեղափոխվել է ապա անհրաժեշտ է պատուհանը վերանկարել.
CS_OWNDC – ամեն մի պատուհանի համար տվյալ դասի համար տրվում է իր սարքի կոնտեկստ.
CS_DBLCLKS – երբ կատարվել է երկու կլիկ մկնիկով, պատուհանին հաղորդվում է 2 անգամ սղմում մկնիկով ինֆորմացիա.
lpfnWndProc – դա ցուցիչ է ֆունկցիաի հակառակ կանչմանը.Ամեն մի Windows-ի հավելվածում(приложение) գոյություն ունի իրադարձությունների մշակման ցիկլ որի աշխատանքի ժամանակ կատարվում է MainWinProc – ի կանչում.
Երկու հատ տող cbClsExtra և cbWndExtra, նախատեսված են լրացուցիչ ինֆորմացիաի պահպանման համար.Սակայն նրանց հազվադեպ են օգտագործում, մեզ Directx –ում այն պետկ չի գալու.Այս պատճառով գրում ենք. Windowsclass.cbClsExtra = 0; windowsclass.cbWndExtra = 0;
hinstance – պարամետր, որը պատասխանում է ստեղծվող նմուշի հավելվածին.որը հաղորդվում է WiMain ( ) ֆունկցիայով. Windowsclass.hInstance = hinstance;
hIcon – ծառայում է ձեր հավելվածում պիկտոգրամաի( փոքր նկար վերնագրի ձախ կողմում ) որոշման համար.LoadIcon ( ) ֆունկցիաի օգնությամբ կարելի է բեռնավորել սեփական կամ Windows-ի պիկտոգրամմա.LoadIcon ( ) –ի պրոտոտիպը ունի հետևյալ տեսք.
HICON LoadIcon ( HINSTANCE hinstance, LPCTSTR IconName );
Hinstance – հավելվածի նմուշ, որպեսզի բեռնավորենք ստանդարտ պիկտոգրամմա, օգտագործվում է NULL նշանակություն;
LpIconName – դա բեռնավորվող պիկտոգրամմաի աղբյուրի ինդենտիֆիկատորն է.Այստեղ մենք օգտագործում ենք IDI_APPLICATION .Պրոտոտիպը հետևյալն է
Windowsclass.hIcon = LoadIcon ( hinstance, IDI_APPLICATION );
hCursor – Այս պարամետրը պատասխանում է կուրսորի համար.Ինքը գրվում է հետևյալ ձև
windowsclass.hCursor = LoadCursor ( NULL, IDC_ARROW );
hbrBackground – այս ստրուկտուրաի տողը ,պատասխանում է պատուհանի ֆոնի գույնի համար.Որպեսզի ներկենք ֆոնը մեր ուզաց գույնով, պետկ է օգտագործել GetStockObject ( ) ֆունկցիա, որը ընդունում է մեկ դրոշի պարամետր, որը որոշում է վրձինի գույնը.Որպեսզի ֆոնը ներկենք սերիյ գույնի կգրենք սա;
windowclass.hbrBackground = ( HBRUSH ) GetStockObject ( WHITE_BRUSH );
Կարելի է ներկել նաև ոևրիշ դրոշներով, նրանց ցուցակը:
GRAY_BRUSH – սերիյ վրձին.
BLACK_BRUSH – սև վրձին.
WHITE_BRUSH – սպիտակ գույնն է որով մենք ներկում ենք մեր պատուհանի ֆոնը.
LTGRAY_BRUSH – բաց – սերիյ վրձին.
DKGRAY-BRUSH – մութ – սերիյ վրձին.
HOLLOW_BRUSH – դատարկ վրձին.
lpszMenuName – տող, որը անհրաժեշտ է ստանդարտ մենյուն պատուհանին միացնելու համար.Մեր մոտ դրված է NULL նշանակություն, քանի որ մենք չենք օգտագործելու մենյուն մեր պրոեկտենեորւմ: windowsclass.lpszMenuName = NULL.
lpszClassName – տրվում է մեր պատուհանի դասի անվանումը , ստեղծվող հավելվածի համար: Windowsclass.lpszClassName = “WINDOWSCLASS”;
hIconSm – սա ստեղծվող փոքր պիկտոգրամմաի դեսկրիպտորն է, որը դուրս է բերվում պանելի խնդրի վրա .
windosclass.hIconSm = LoadIcon ( NULL, IDI_APPLICATION );
Վերջացնելով բոլոր տողերի լրացումը նաենք թե ինչ է ստացվել:
windowsclass.cbSize = sizeof(WNDCLASSEX);
windowsclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;
windowsclass.lpfnWndProc = MainWinProc;
windowsclass.cbClsExtra = 0;
windowsclass.cbWndExtra = 0;
windowsclass.hInstance = hinstance;
windowsclass.hIcon = LoadIcon(hinstance, IDI_APPLICATION);
windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW);
windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
windowsclass.lpszMenuName = NULL;
windowsclass.lpszClassName = "WINDOWSCLASS";
windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
Դրանից հետո երբ դուք լրացրել եք և պահպանել եք նշանակությունները windosclass փոփոխականում, windowsclass – ը պետկ է գրանցել.Արվում է դա RegistrerClassEx ( ) ֆունկցիայով. RegisterClassEx ( & windowsclass ); // գրանցում ենք ստեղծված դաս(class ).
Ստեղծում ենք պատուհան
Դրանից հետո երբ դասը(class) գրանցված է,կարելի է ստեղծել պատուհան.Դա արվում է CreateWindowEx ( ) ֆունկցիայով.Նրա տեսքը հետևյալնը:
HWND CreateWindowEx(
DWORD dwExStyle,
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam
);
CreateWindowEx ֆունկցիայի պարամետրերը հետևյալն են:
dwExStyle - պատուհանի ձևի դրոշներ,կարելի է ասել որ չի օգտագործվում և ստանում է NULL.
LpClassName – դա ստեղծվող պատուհանի անվանումն է, մեր դեպքում “WINDOWSCLASS”.
LpWindowName – դա մեր պատուհանի վերնագիրն է ստեղ կարող եք գրել ինչ ուզում եք, մենք կոգտագոծենք “Bazain patuhan Directx-i hamar”.
Dwstyle- դա դրոշ է, որը նկարագրում է պատուհանի ձևը և վարքը.
Ահա և նրանց մի քանիսը:
WS_OVERLAPPED – պատուհան շերտի վերնագրով և րամկա.
WS_VISIBLE – սկզբնականից տեսնվող պատուհան.
WS_CAPTION – պատուհան շերտի վերնագրով ( ինքը իր մեջ ընկալում է WS_BORDER ձև ).
WS_BORDER – պատուհան բարակ րամկաով.
WS_ICONIC – պատուհանը սկզբնականից փոքրացված է.
WS_OVERLAPPEDWINDOW – ծածկվող պատուհան ( որը իր մեջ ընկալում է հետևյալ վեցը ձև: WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX –նրան մենք և կոգտագործենք.
WS_MINIMIZE – սկզբնականից մինիմիզացվաց պատուհան.
WS_MAXIMIZE – սկզբնականից մակսիմազված պատուհան.
WS _MAXIMIZEBOX – պատուհան MAXIMIZE կնոպկայով .
WS_MINIMIZEBOX – պատուհան MINIMIZE կնոպկայով.
x, y – դա վերևի ձախ անկյունի պատուհանի դիրքն է.Նրանց կորդինատները կդնենք x -300 ,y – 150.
nwidth և nheight - պատուհանի լայնությունը և բարձրությունը.Մենք կդնենք 500 և 400.
hwndParent – մայրական պատուհանի դեսկրիպտոր,եթե մայրական պատուհան չկա ապա օգտագործվում է NULL նշանակություն.
Hmenu – մենուի դեսկրիպտոր, եթե դուք ունեք մենու կարող եք ցույց տալ նրան.Եթե մենյուն չկա ապա դրվում է NULL նշանակություն.
Hinstance – ձեր պատուհանի նմուշն է, օգտագործում է hinstance նշանակություն.
Այս պահին մեզ հայտնի է ֆունկցիայի բոլոր նշանակությունները.Ստեղծենք պատուհան.
Կհայտարարենք պատուհանի դեսկրիպտոր և կկանչենք CreatWindowEx ( ) ֆունկցիա.
HWND hwnd;
hwnd = CreateWindowEx(NULL, // պատուհանի ձևը
"WINDOWSCLASS", // դաս(class)
"Урок 1. Базовое Окно для DirectX ", // պատւհանիանվանում окна
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
300,150, // վերևի ձախ անկյուն
500,400, // լայնություն և բարձրություն
NULL, // մայրական պատուհանի դեսկրիպտոր
NULL, // մենուի դեսկրիպտոր
hinstance, // նմուշի դեսկրիպտոր
NULL)))

Դրանից հետո երբ պատուհանը ստեղծված է ,Նրան պետկ է դուրս բերել և թարմացնել.
Դա կատարվում երկու ֆունկցիաներով.
ShowWindow( hwnd, SW_SHOWDEFAULT ); //Կնկարենք պատուհան
UpdateWindow( hwnd ); //Կթարմացնենք պատուհան
Էջանիշներ