السلام عليكم
أردت أن نناقش مبادىء Win32 من جميع النواحي و لنبدأ :
أولا هذا أبسط مثال لل Win32 :
#include <windows.h>
LRESULT CALLBACK WndProc( HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam );
char szProgName[] = "Hello Win32"; /* إسم البرنامج */
int WINAPI WinMain(HINSTANCE hInst,
HINSTANCE hPreInst,
LPSTR lpszCmdLine,
int nCmdShow )
{
HWND hWnd;
MSG lpMsg;
WNDCLASS wc;
if( !hPreInst )
{
wc.lpszClassName = szProgName;
wc.hInstance = hInst;
wc.lpfnWndProc = WndProc;
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.lpszMenuName = NULL;
wc.hbrBackground = (HBRUSH)
GetStockObject( WHITE_BRUSH );
wc.style = 0;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
if( !RegisterClass( &wc ) )
return FALSE;
}
hWnd = CreateWindow(/* إنشاء النافذة */
szProgName,
"Simple Win32",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
(HWND)NULL,
(HMENU)NULL,
(HINSTANCE)hInst,
(LPSTR)NULL
);
ShowWindow(hWnd, nCmdShow );
UpdateWindow( hWnd );
/* بداية حلقة الراسأل */
while( GetMessage( &lpMsg, NULL, 0, 0 ) )
{
TranslateMessage( &lpMsg );
DispatchMessage( &lpMsg );
}
return( lpMsg.wParam);
}
LRESULT CALLBACK WndProc( HWND hWnd, UINT messg,WPARAM wParam, LPARAM lParam )
{
switch(messg)
{
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return( DefWindowProc( hWnd, messg, wParam, lParam ) );
}
return( 0L );
}نبدأ بي
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
مع جميع إحتمالاتها و هي :
IDC_ARROW = مأشر عادي IDC_APPSTARTING = مأشر عادي مع مأشر الوقت الزجاجي أي hour glass IDC_CROSS = مأشر على شكل علامة زائد كبيرة IDC_IBEAM = مأشر النص IDC_NO = مأشر دائري IDC_SIZEALL = مأشر التحريك و هو عبارة عن أربع أسهم كل منه في إتجاه IDC_SIZENESW = مأشر ذو سهمين متجهين من الشمال الشرقي إلى الجنوب الغربي و هو لتحكم في حجم النافذة IDC_SIZENWSE = و هو أيظا مأشف ذو سهمين فقط هو عكس IDC_SIZENESW في الإتجاه IDC_SIZENS = مأشر ذو سهمين متجهين من الأعلى إلى الأسفل ... IDCSIZEWE = وهو عكس IDC_SIZENS IDC_UPARROW = مأشر من سهم واحد متجه إلى الأعلى IDC_WAIT = مأشر الإنتظار
ثانيا :
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
و هي :
IDI_APPLICATION = وهي الإيقونية الإفتراضية IDI_ASTERISK = إيقونة النجمة IDI_EXCLAMATION = إيقونة التعجب IDI_HAND = إيقونة اليد IDI_QUESTION = إيقونة الأسألة IDI_WINLOGO = هي كما IDI_APPLICATION
ثالثا :
wc.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );
به الكثير من الأمثلة حيث يمكن إستعمالها بقريقة أخرى و هي الأفظل :
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+0);
حيث يمكنك التغير في القيمة صفر إلى أقصى حد وهو 25 و كل رقم و لونه الخاص به
و هذه في حالة إستعملنها المثال الأول :
BLACK_BRUSH = لون أسود WHITE_BRUSH = لون أبيض GRAY_BRUSH = لون رمادي LTGRAY_BRUSH = رمادي مضيء صلب DKGRAY_BRUSH = رمادي مضلم صلب NULL_BRUSH = لا لون ...
رابعا :
wc.style = 0;
و هي :
CS_HREDRAW = إعاد سحب النافذة الكاملة إذا حركة أوالتعديل في حجم عرض النافذة CS_VREDRAW = إعاد سحب النافذة الكاملة إذا حركة أوالتعديل في حجم طول النافذة CS_OWNDC = يجعل النافذة أكثر نسبا CS_DBLCLKS = النقر المزدوج CS_NOCLOSE = لا يستطيع المستخدم الخروج بإستخدام Alt+F4 ...
أتوقف هنا مأقتا و أنتظر باقي الأعضاء في الزيادة على الموضوع و النقاش فيه جدا
و في المرة القادمة سندخل في الألعاب و لكن فقط البداية و بعدها نتعمق أكثر
و شكرا
