نمایش نتایج 1 تا 21 از 21

نام تاپیک: مشکلات من با win32

  1. #1
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    30
    پست
    886

    مشکلات من با win32

    سلام
    خط دوم چه چیز رو مشخص میکنه؟
        WNDCLASSEX  w;
    w.cbSize = sizeof(WNDCLASSEX);

    کلا چه سایزی رو مشخص میکنه؟
    ممنون.

  2. #2
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    نقل قول: مشکلات من با win32

    خط دوم چه چیز رو مشخص میکنه؟
    سایز ساختار مورد نظر را مشخص می کند. اما اگر منظور شما، مورد استفاده ی آن هست، تا جایی که مطلع هستم ویندوز در مورد سایز ساختار ها بسیار سختگیر است و در اغلب ساختار های موجود، سایز ساختار باید صریحا مشخص شود. . علت این امر شاید مربوط به این باشد که ممکن است سایز یک ساختار در ورژن های مختلف ویندوز متفاوت باشد.
    آخرین ویرایش به وسیله clover : پنج شنبه 22 بهمن 1388 در 17:06 عصر

  3. #3
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    30
    پست
    886

    نقل قول: مشکلات من با win32

    سلام

    این 2تا کد در قسمتی که با رنگ قرمز مشخص شده متفاوتند!! چرا ؟ کدوم بهتره؟

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg)
    {
    case WM_CLOSE:
    DestroyWindow(hwnd);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
    }
    LRESULT CALLBACK WindowProc(HWND hwnd ,
    UINT msg ,
    WPARAM wparam ,
    LPARAM lparam )
    {
    PAINTSTRUCT ps;
    HDC hdc;
    Switch(msg)
    {c
    ase WM_CREATE :
    {
    Return (0);
    }break;
    case WM_PAINT :
    {
    hdc = BeginPaint(hwnd,&ps);
    EndPaint(hwnd,&ps);
    Return (0);
    }break;
    case WM_DESTROY :
    {
    PostQuitMessage(0);
    Return (0);
    }break;
    default:break;
    }
    return (DefWindowProc(hwnd, msg, wparam, lparam));
    آخرین ویرایش به وسیله 1485159 : جمعه 23 بهمن 1388 در 13:28 عصر

  4. #4
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    30
    پست
    886

    نقل قول: مشکلات من با win32

    کسی نیست جواب بده؟
    این چیکار میکنه؟
    AdjustWindowRectEx

  5. #5
    کاربر دائمی آواتار clover
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    اصفهان - اراک
    پست
    646

    نقل قول: مشکلات من با win32

    این 2تا کد در قسمتی که با رنگ قرمز مشخص شده متفاوتند!! چرا ؟ کدوم بهتره؟
    لقمه را هم از جلوی سر و هم با چرخاندن از پشت سر می توان در دهان گذاشت! چرا این دو روش با هم متفاوتند ؟ کدام بهتر است ؟

    فراخوانی تابع (...)DefWindowProc در بخش default دستور switch، برای خالی کردن صف پیغام های برنامه از هرگونه پیغام ناشناخته و یا پردازش نشده لازم است. این تابع تضمین می کند که تمام پیغام های فرستاده شده به برنامه، پردازش شده اند.

    حال شما می توانید در بخش default دستور switch، دستور break را قرار دهید تا از دستور switch، خارج شوید و سپس تابع (...)DefWindowProc را فراخوانی کنید.
    به نظر خودتان کدام بهتر است ؟ (دقت کنید که فراخوانی این تابع در هر دو حالت بعد از دستور return اتفاق افتاده است، یعنی بلافاصله بعد از پایان کار این تابع، از تابع WindowProc خارج خواهیم شد)

    نقل قول نوشته شده توسط 1485159 مشاهده تاپیک
    کسی نیست جواب بده؟
    این چیکار میکنه؟
    AdjustWindowRectEx
    فرض کنید شما به ناحیه کلاینت با ابعاد 300x400 پیکسل نیاز دارید. در تابع (...)CreateWindowEx ابعاد پنجره را چگونه محاسبه خواهید کرد ؟

    ابعاد پنجره = ابعاد ناحیه کلاینت + فضای اضافی برای نوار عنوان، نوار پیمایش، نوار منو و ...

    تابع (...)AdjustWindowRectEx این کار را برای شما انجام خواهد داد.
    آخرین ویرایش به وسیله clover : جمعه 23 بهمن 1388 در 21:29 عصر

  6. #6
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    30
    پست
    886

    نقل قول: مشکلات من با win32

    سلام
    در کد زیر میشه به جای قسمت قرمز، 0 گذاشت؟
    // Test-2.CPP - A complete windows program

    // INCLUDES ///////////////////////////////////////////////
    #define WIN32_LEAN_AND_MEAN // just say no to MFC

    #include <windows.h> // include all the windows headers
    #include <windowsx.h> // include useful macros
    #include <stdio.h>
    #include <math.h>

    // DEFINES ////////////////////////////////////////////////

    // defines for windows
    #define WINDOW_CLASS_NAME "WINCLASS1"

    // GLOBALS ////////////////////////////////////////////////


    // FUNCTIONS //////////////////////////////////////////////
    LRESULT CALLBACK WindowProc(HWND hwnd,
    UINT msg,
    WPARAM wparam,
    LPARAM lparam)
    {
    // this is the main message handler of the system
    PAINTSTRUCT ps; // used in WM_PAINT
    HDC hdc; // handle to a device context

    // what is the message
    switch(msg)
    {
    case WM_CREATE:
    {
    // do initialization stuff here

    // return success
    return(0);
    } break;

    case WM_PAINT:
    {
    // simply validate the window
    hdc = BeginPaint(hwnd,&ps);
    // you would do all your painting here
    EndPaint(hwnd,&ps);

    // return success
    return(0);
    } break;

    case WM_DESTROY:
    {
    // kill the application, this sends a WM_QUIT message
    PostQuitMessage(0);

    // return success
    return(0);
    } break;

    default:break;

    } // end switch

    // process any messages that we didn't take care of
    return (DefWindowProc(hwnd, msg, wparam, lparam));

    } // end WinProc

    // WINMAIN ////////////////////////////////////////////////
    int WINAPI WinMain( HINSTANCE hinstance,
    HINSTANCE hprevinstance,
    LPSTR lpcmdline,
    int ncmdshow)
    {

    WNDCLASSEX winclass; // this will hold the class we create
    HWND hwnd; // generic window handle
    MSG msg; // generic message

    // first fill in the window class stucture
    winclass.cbSize = sizeof(WNDCLASSEX);
    winclass.style = CS_DBLCLKS | CS_OWNDC |
    CS_HREDRAW | CS_VREDRAW;
    winclass.lpfnWndProc = WindowProc;
    winclass.cbClsExtra = 0;
    winclass.cbWndExtra = 0;
    winclass.hInstance = hinstance;
    winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winclass.lpszMenuName = NULL;
    winclass.lpszClassName = WINDOW_CLASS_NAME;
    winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    // register the window class
    if (!RegisterClassEx(&winclass))
    return(0);

    // create the window
    if (!(hwnd = CreateWindowEx(NULL, // extended style
    WINDOW_CLASS_NAME, // class
    "Your Basic Window", // title
    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    0,150, // initial x,y
    400,500, // initial width, height
    NULL, // handle to parent
    NULL, // handle to menu
    hinstance,// instance of this application
    NULL))) // extra creation parms
    return(0);

    // enter main event loop
    while(GetMessage(&msg,NULL,0,0))
    {
    // translate any accelerator keys
    TranslateMessage(&msg);

    // send the message to the window proc
    DispatchMessage(&msg);
    } // end while

    // return to Windows like this
    return(msg.wParam);

    } // end WinMain

    ///////////////////////////////////////////////////////////


    ممنون.

  7. #7
    کاربر جدید آواتار CppBuilder2006
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    کانال تلگرام @cplusplus
    پست
    15

    نقل قول: مشکلات من با win32

    من معمولا خروجی WinMainنو صفر میذارم. مشکلی پیش نمیاد.
    __________________
    آموزش کامل زبان ++C به صورت pdf در http://irancplusplus.blogspot.com
    شامل یک pdf دربارۀ «آشنایی با نظریه نسبیت خاص» و ویرایش سوم «با ++C آشنا شویم» و «Internet Time». روی لینک کنار وبلاگ کلیک کنید.

  8. #8
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    30
    پست
    886

    نقل قول: مشکلات من با win32

    من جوابی قطعی میخوام!!!!!

  9. #9

    نقل قول: مشکلات من با win32

    از MSDN مایکروسافت برای هر تابع استفاده کنید تا قوانین return هر تابع (اینجا تابع اصلی برنامه) مشخص شود:


    Return Value
    int

    If the function succeeds, terminating when it receives a WM_QUIT message, it should return the exit value contained in that message's wParam parameter. If the function terminates before entering the message loop, it should return zero.
    یعنی اگر پیام موفقیت (خروج برنامه) داده شد، باید غیر صفر و مقدار خروجی wParamپیام کنونی داده شود.
    اگر برنامه قبل از loop پیام ها بود (به هر دلیلی / خطا / ... قرار شد خارج شود ) باید صفر برگرداند.

    این کار هم به شما کمک می کند، هم به سیستم که بداند کجا برنامه بر اساس خطا بسته شده، کجا بر اساس درست بودن


  10. #10

    نقل قول: مشکلات من با win32

    نقل قول نوشته شده توسط CppBuilder2006 مشاهده تاپیک

    ولی واقعیت اینه که ممکنه WinMain اصلا هیچ حلقه ای نداشته باشه. یا ممکنه 10 تا حلقۀ پیام داشته باشه. این چیزی که توی help نوشته خیلی هم دقیق نیست. اما خب معمولا یه حلقه بیش تر نیست.
    اگر از دیالوگ استفاده نکنیم، یک پنجره (window) در ویندوز صف خواندن پیام دارد، در غیر این صورت دریافت و پردازش پیام ها یه شکل جداگانه نیاز به دریافت شدن نیست.

    در هر حال مهم این نیست که پیام وجود دارد یا ندارد، در MSDN وقتی گفته می شود "should" یعنی "باید" از نوع غیر اکید، اگر نکنید خطای خاصی صورت نمی گیرد. اگر در جایی ضروری باشد، همیشه کلمه "Must" را برای return به کار می برند.
    پس اگر صف پیامی وجود دارد و پردازش پیام در برنامه انجام می شود، آنگاه این return را می توان طبق قانون مطرح شده انجام داد.

    به این شکل اگر به خاطر خطایی برنامه بسته شود در ویندوز های اخیر مثل 7 و vista راحت تر به action center پیام ارسال می شود و علت خطا پردازش و یافته می شود و به کاربر نیز اطلاع داده می شود. پس این شیوه به یافتن خطا در سیستم کمک می کند، اما ضروری نیست.

  11. #11
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    30
    پست
    886

    نقل قول: مشکلات من با win32

    چطوری طول و عرض یک پنجره رو تغییر بدم؟

  12. #12

    نقل قول: مشکلات من با win32

    نقل قول نوشته شده توسط 1485159 مشاهده تاپیک
    چطوری طول و عرض یک پنجره رو تغییر بدم؟
    به این شکل:

    SetWindowPos(hwnd,
    HWND_TOP,
    0, 0,
    new_wx , new_wy ,
    SWP_NOMOVE);

  13. #13
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    30
    پست
    886

    نقل قول: مشکلات من با win32

    سلام
    ممنون ولی من نمیتونم استفاده کنم. وقتی از این کد استفاده میکنم کلا اندازه فرم به هم میریزه:
      SetWindowPos(h_wnd,
    HWND_TOP,
    0, 0,
    500 , 500 ,
    SWP_NOMOVE);

  14. #14

    نقل قول: مشکلات من با win32

    نقل قول نوشته شده توسط 1485159 مشاهده تاپیک
    سلام
    ممنون ولی من نمیتونم استفاده کنم. وقتی از این کد استفاده میکنم کلا اندازه فرم به هم میریزه:
    منظورتان از اینکه "اندازه فرم به همین میریزه" چه هست؟ مگر نمی خواهید طول و عرض دیالوگ یا پنجره 500 در 500 شود ؟
    کدی که نوشتید به درستی پنجره را تغییر اندازه می دهد. (از سمت راست و پایین به اندازه پنجره اضافه می شود)

    اگر دیالوگ هست و داری کنترل های مختلف هست، باید تک تک کنترل ها را با همین تابع جابجا کنید.

  15. #15
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    30
    پست
    886

    نقل قول: مشکلات من با win32

    سلام
    اگه ممکنه در مورد پارامتر دوم این تابع توضیح بدین: SetTimer

  16. #16
    کاربر تازه وارد
    تاریخ عضویت
    دی 1387
    محل زندگی
    امپراطوری پارس
    پست
    46

    نقل قول: مشکلات من با win32

    من سوال دارم در مورد این که بعد از معرفی کردن یک device context و مشخصات آن مثل pen,font,region,brush حالا نمی دونم چه طور از این device context ایجاد شده استفاده کنم لطفا راهنمایی!

  17. #17

    نقل قول: مشکلات من با win32

    نقل قول نوشته شده توسط 1485159 مشاهده تاپیک
    سلام
    اگه ممکنه در مورد پارامتر دوم این تابع توضیح بدین: SetTimer
    شما در فایل resource.h یک ID به همراه شماره define می کنید (مانند سایر کنترل ها)، سپس آن را در پارامتر دوم قرار می دهید.
    این طوری با فراخوانی این ID همیشه به همین timer دسترسی دارید.

  18. #18

    نقل قول: مشکلات من با win32

    نقل قول نوشته شده توسط little.boy مشاهده تاپیک
    من سوال دارم در مورد این که بعد از معرفی کردن یک device context و مشخصات آن مثل pen,font,region,brush حالا نمی دونم چه طور از این device context ایجاد شده استفاده کنم لطفا راهنمایی!
    شما باید کدهای رسم خود را در قسمت WM_PAINT بنویسید، لذا فقط کافیست از BeginPaint استفاده کنید. GetDc در موارد دیگر کاربرد دارد.

    مثال های مورد نظر خود را از صفحه اول این تاپیک مشاهده کنید (کلیک کنید)

  19. #19
    کاربر دائمی آواتار 1485159
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    NULL
    سن
    30
    پست
    886

    نقل قول: مشکلات من با win32

    شما در فایل resource.h یک ID به همراه شماره define می کنید (مانند سایر کنترل ها)، سپس آن را در پارامتر دوم قرار می دهید.
    این طوری با فراخوانی این ID همیشه به همین timer دسترسی دارید.
    اصلا چیزی نفهمیدم! اگه ممکنه یه مثال بزنید.

  20. #20

    نقل قول: مشکلات من با win32

    نقل قول نوشته شده توسط 1485159 مشاهده تاپیک
    اصلا چیزی نفهمیدم! اگه ممکنه یه مثال بزنید.
    فایل resource.h را نگاه کردید؟ خیر

    در فایل resource.h مثلا بنویسید:

    #define IDT_TIMER1 1001
    شماره باید منحصر به فرد باشد و مشابه آن تعریف نشده باشد.

    سپس هنگام فراخوانی:

    SetTimer(hwnd, IDT_TIMER1, 500, (TIMERPROC) NULL);

    هنگام استفاده:

    case WM_TIMER:
    switch (wParam)
    {
    case IDT_TIMER1:
    // use here

    return 0;
    }

  21. #21

    نقل قول: مشکلات من با win32

    از ما خواسته شده از پرسیدن سوالات در یک تاپیک جلوگیری کنیم.

    سوالات بعدی را در تاپیک جدید مطرح کنید و عنوان مناسب انتخاب کنید، مثلا علاوه بر عنوان می توانید عبارت win32 را داخل پرانتر در عنوان بنویسید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •