آموزش برنامه نویسی ویندوز ( Win32 ) ، درس دوم |
درس دوم : مقدمه ای بر منابع اصول منابع
مقدمه : یک منبع یک شئ است که نمی توان آنرا تحت دستور زبان ++C تعریف کرد با این حال برای تکمیل یک برنامه به آن نیاز است . به بیان صریح تر، یک منبع، متنی است متشکل از یک سلسله فرامین که با ضوایط خاصی تعریف شده اند و برنامه به واسطه ی این فرامین منبع مورد نظر را تفسیر می کند . منو ها، آیکون ها، اشاره گر ها، کادر های محاوره، صداها و ... نمونه هایی از منابع هستند . ابزار های مختلفی برای ساخت منابع می توانند مورد استفاده قرار بگیرند که بسته به هدف و نوع استفاده شما از منابع دارد . برخی منابع کاملا مبتنی بر متن هستند، برای مثال String Table و Accelerator Table که رشته های متنی را در خود نگه می دارند . برخی منابع نیاز به طراحی دارند، مانند آیکون ها و اشاره گر ها و یا عکس هایی با گرافیک بالا که توسط یک نرم افزار خارجی ساخته شده و سپس آنها را وارد برنامه می کنند . در عین حال منابع می توانند ترکیبی از منابع مختلف دیگر باشند . ایجاد منابع : باز هم یاد آور می شویم که منابع از جمله مفاهیم زبان ++C نیستند بلکه از مفاهیم سیستم عامل ویندوز هستند که برای تکمیل برنامه مورد استفاده قرار می گیرند . به همین دلیل محیط هایی که شما در آنها برنامه نویسی می کنید ممکن است ابزار های مختلفی برای ساخت منابع مختلف در اختیار شما قرار دهند و یا حتی هیچ ابزاری در اختیار شما قرار ندهند . به عنوان مثال محیط هایی نظیر Borland C++ Builder و یا Microsoft Visual C++ 2008 تمام ابزار های لازم برای ساخت انواع منابع را دارا می باشند در حالی که برای محیط هایی نظیر C++BuilderX باید از ابزار های خارجی کمک گرفت . به محض ایجاد یک منبع شما باید آنرا ذخیره کنید . برخی منابع در فایل های مجزای مخصوص به خود ذخیره می شوند، مانند بیتمپ ها، آیکون ها، اشاره گر ها، صداها و ... فایل های هر کدام از این منابع پسوند های مربوط به خود را دارند . سپس به فایلی با پسوند .rc ( فایل منبع برنامه ) اضافه می شوند . در مورد این منابع فقط لیستی از آنها به فایل منبع افزوده می شود . برخی دیگر از منابع نیز وجود دارند که مستقیما در فایل منبع تعریف می شوند و نیاز به فایل جداگانه ای ندارند . اینها همان منابع مبتنی بر متن هستند که در بالا به آنها اشاره شد مانند جداول متنی، رشته ها و ... بعد از ایجاد فایل منبع، شما باید آنرا کامپایل کنید . در این مورد هم در محیط های مختلف با شرایط مختلفی روبرو خواهید شد . محیط Microsoft Visual C++ 2008 هنگام اجرای برنامه این کار را به صورت خودکار برای شما انجام خواهد داد . آموزش عملی : معرفی منابع ویندوز 1) یک پروژه جدید Win32 مانند آنچه در درس قبل آموزش داده شد ایجاد کنید . نام پروژه را Resources1 قرار دهید . 2) یک فایل کد با نام Exercise.cpp ایجاد کنید . 3) کد زیر را در فایل Exercise.cpp وارد کنید . 4) برنامه را اجرا و تست کنید . //--------------------------------------------------------------------------- #include <windows.h> #pragma hdrstop //--------------------------------------------------------------------------- LPCTSTR ClsName = L"FundApp"; LPCTSTR WndName = L"Resources Fundamentals"; LRESULT CALLBACK WndProcedure(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); //--------------------------------------------------------------------------- INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG Msg; HWND hWnd; WNDCLASSEX WndClsEx; // Create the application window WndClsEx.cbSize = sizeof(WNDCLASSEX); WndClsEx.style = CS_HREDRAW | CS_VREDRAW; WndClsEx.lpfnWndProc = WndProcedure; WndClsEx.cbClsExtra = 0; WndClsEx.cbWndExtra = 0; WndClsEx.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClsEx.hCursor = LoadCursor(NULL, IDC_ARROW); WndClsEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WndClsEx.lpszMenuName = NULL; WndClsEx.lpszClassName = ClsName; WndClsEx.hInstance = hInstance; WndClsEx.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // Register the application RegisterClassEx(&WndClsEx); // Create the window object hWnd = CreateWindowEx(0, ClsName, WndName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); // Find out if the window was created if( !hWnd ) // If the window was not created, return FALSE; // stop the application // Display the window to the user ShowWindow(hWnd, nCmdShow);// SW_SHOWNORMAL); UpdateWindow(hWnd); // Decode and treat the messages // as long as the application is running while( GetMessage(&Msg, NULL, 0, 0) ) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; } //--------------------------------------------------------------------------- LRESULT CALLBACK WndProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch(Msg) { case WM_DESTROY: PostQuitMessage(WM_QUIT); break; default: // Process the left-over messages return DefWindowProc(hWnd, Msg, wParam, lParam); } // If something was not done, let it go return 0; } //--------------------------------------------------------------------------- منبع : http://www.functionx.com
|