دخول الأعضاء
الاسم: الكلمة السرية:

هل نسيت الكلمة السرية؟ أضغط هنا..
وضعية التسجيل: مفتوح
 
معلومات عن المنتدى برمجة المواقع والمنتديات ومشاكلها
رد على الموضوع
أضف رد
أضف موضوع جديد
موضوع جديد
أرسل هدا الموضوع الى صديق
أرسل
طباعة موضوع
طباعة
التواقيع:
حجم الصفحة: إذهب الى منتدى:
موضوع مفتوح ◄♥♥ لبرمجة الواجهات الرسومية بالمحبوبة C ♥♥►
RAZOR SAT

مشاركات: 899
نقاط التميز: 10
الدولة:
الجنس: ذكر
نقاط الشاكرا: 899

المشاركات: 899
نقاط التميز: 10

عضو متطور
الرصيد: $0
الدولة :الجزائر
انضم منذ:599 أيام
معدل مشاركات : 1.5
13:34 - 2016/04/02
معلومات عن العضو
ردود هذا العضو فقط
 

اليوم سنتطرق الى كيفية إنشاء واجهة رسومية بالمحبوبة C
وذلك بإستخدام دوال API 
مقدمة صغيرة حول دوال API
دوال API هي دوال يتيحها نظام التشغيل للبرامج مثلا لتعامل مع العتاد لكن بطريقة غير مباشرة
سنرى كيف نتعامل مع الشاشة لكن بطريقة غير مباشرة وذلك بحجز نافذة
 

الكود سورس في بيئة الكونسول:

#include
#include
LRESULT CALLBACK WindowProcedure( HWND window, unsigned int msg, WPARAM wp, LPARAM lp )
{
    switch(msg)
    {
        case WM_DESTROY:
            printf("ndestroying windown") ;
MessageBox(window,"(^_°)" ,"StarTimes",0);
            PostQuitMessage(0) ;
            return 0L ;
case WM_RBUTTONDOWN:
printf("nMouse right button down at (%d , %d)n" , LOWORD(lp), HIWORD(lp));
            break;
:case WM_LBUTTONDOWN
           printf("nMouse left button down at (%d , %d)n" , LOWORD(lp), HIWORD(lp));
break;
case WM_MOUSEMOVE:
printf("nMouse coordinates:(%d , %d)n" , LOWORD(lp), HIWORD(lp));
break;
        default:
            printf(".") ;
            return DefWindowProc( window, msg, wp, lp ) ;
    }
}
int main()
{
   
    printf("hello startimes!n");
const char*  myclass = "myclass" ;
    WNDCLASSEX wndclass ;
wndclass.cbSize = sizeof(WNDCLASSEX); 
wndclass.style= CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc= WindowProcedure;
wndclass.cbClsExtra= NULL;
wndclass.cbWndExtra= NULL;
wndclass.hInstance= GetModuleHandle(0);
wndclass.hIcon= LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor= LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
        wndclass.lpszClassName= myclass;
wndclass.lpszMenuName   = NULL;
wndclass.hIconSm= LoadIcon(wndclass.hInstance,IDI_APPLICATION);
    if( RegisterClassEx(&wndclass) )
    {
        HWND window = CreateWindowEx( 0, myclass, "introduction to GUI",
                   WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
                   300, 200, 0, 0, GetModuleHandle(0), 0 ) ;
        if(window)
        {
            ShowWindow( window, SW_SHOWDEFAULT ) ;
            MSG msg ;
            while( GetMessage( &msg, 0, 0, 0 ) ) DispatchMessage(&msg) ;
        }
    }

 فالدالة التي سمستخدمها لإنشاء النافذة هي CreateWindowEx موجدة في الملف الرأسي Winuser.h
الموجود بدوره في مجلدالملفات الرأسية
X:Program FilesMicrosoft Visual StudioVC98Include 
(VC++ 6.0)
و الأخير مصرح ضمن window.h كما سنرى لاحقا لكن الدالة المسستخدمة يقوم البرنامج بمناداتها من 
 مكتبة USER32.DLL الموجودة في كل أنظمة ويندوز
 
(يعني البرنامج صالح لكل انظمة ويندوز دون ارفاقه بملفات أو تسطيبه)

HWND WINAPI CreateWindowEx(
  _In_      DWORD dwExStyle,
  _In_opt_  LPCTSTR lpClassName,
  _In_opt_  LPCTSTR lpWindowName,
  _In_      DWORD dwStyle,
  _In_      int x,
  _In_      int y,
  _In_      int nWidth,
  _In_      int nHeight,
  _In_opt_  HWND hWndParent,
  _In_opt_  HMENU hMenu,
  _In_opt_  HINSTANCE hInstance,
  _In_opt_  LPVOID lpParam
 );

للدالة 12 Parameters 
الاهم منها هي القيمة الرجوعية لها من نوع HWND يعني Window Handle أي مقبض النافذة قمنا بتسميتها 
window فإن لم تكن معدومة يعني أنه تم إنشاء نافذة معرفة بقيمة عددية (بطول 4 بايت على ما أظن)
 و البراماتر الثالث الذي يحتوي إسم كلاس النافذة فقبل منادات دالة الانشاء يجب تسجيل الكلاس من نوع  

 
typedef struct tagWNDCLASSEX {
 UINT      cbSize;
 UINT      style;
 WNDPROC   lpfnWndProc;
 int       cbClsExtra;
 int       cbWndExtra;
 HINSTANCE hInstance;
 HICON     hIcon;
 HBRUSH    hbrBackground;
 HCURSOR   hCursor;
 LPCTSTR   lpszClassName;
 LPCTSTR   lpszMenuName;
 HICON     hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;

WNDCLASSEX  (بنية - struct)قمنا بتسمية البنية wndclass    أهم إعداداتها المتغير 
wndclass.lpszClassName يحمل اسم الكلاس و المتغير  wndclass.lpfnWndProc يحمل اسم الدالة الخاصة 
بالنافذة اي الدالة التي يناديها النظام عند اي حدث يخص النافذة
 if(window)
الامر 
يعني انه إذا لم تكن قيمة المتغير معدومة (يعني تم انشاء النافذة بنجاح) يقوم بالتالي 
 ShowWindow أي عرض النافذة ذات المقبض المعين
MSG msg متغير من نوع رسالة
GetMessage تنعدم عند غلق النافذة 
فالسطر الأخير يفيد ببقاء البرنامج في الحلقة مادامت النافذة لم تغلق
ودالة النافذةWindowProcedure 
لا تحتاج الى شرح
 فمثلا عند تحريك الماوس يقوم مدير النوافذ بارسال رسالة الى الدالة 
msg يفيد نوع الرسالة 
  wp lp يحملان المعلومات الباقية 

أما بالنسبة للثوابت القياسية مثل WM_RBUTTONDOWN موجودة في الملفات المصرحة 
ضمن الملف الراسي window.h  كما يمكن الاطلاع عليها في موقع msdn.microsoft.com 

رابط لأخوات لدالة الإنشاء هههه

www.msdn.microsoft.com/en-us/library/windows/desktop/ff468919(v=vs.85).aspx

رابط لأحداث الماوس:

www.msdn.microsoft.com/en-us/library/windows/desktop/ff468877(v=vs.85).aspx

نلتقي في موضوع اخر ان شاء الله

اخوكم حسان


Pro Coder

مشاركات: 22
نقاط التميز: 0
الدولة:
الجنس: ذكر
نقاط الشاكرا: 22

المشاركات: 22

عضو مبتدئ

الدولة :الصين
انضم منذ:609 أيام
معدل مشاركات : 0.04
20:34 - 2016/04/03 معلومات عن العضو هذا الرد فقط ردود هذا العضو فقط  
السلام عليكم ،
rn
rnهناك بعض الأكواد الغير مكتملة في الكود يا غالي * في هذا الرد ،
rnأرجوا مراجعته مرة أخرى

Youssef HD

مشاركات: 57
نقاط التميز: 15
الدولة:
الجنس:
نقاط الشاكرا: 57

المشاركات: 57
نقاط التميز: 15

عضو مبتدئ

انضم منذ:578 أيام
معدل مشاركات : 0.1
18:36 - 2016/04/09 معلومات عن العضو هذا الرد فقط ردود هذا العضو فقط  
شكرا ليك عزيزي  
rn
rn:v 

morad

مشاركات: 111
نقاط التميز: 5
الدولة:
الجنس:
نقاط الشاكرا: 111

المشاركات: 111
نقاط التميز: 5

عضو نشط

انضم منذ:569 أيام
معدل مشاركات : 0.2
14:54 - 2016/04/13 معلومات عن العضو هذا الرد فقط ردود هذا العضو فقط  
شكرا اخي الكريم

موضوع مفتوح ◄♥♥ لبرمجة الواجهات الرسومية بالمحبوبة C ♥♥►
معلومات عن المنتدى برمجة المواقع والمنتديات ومشاكلها
رد على الموضوع
أضف رد
أضف موضوع جديد
موضوع جديد
أرسل هدا الموضوع الى صديق
أرسل
طباعة موضوع
طباعة
التواقيع:
حجم الصفحة:
T :0.89