error میده. دلیلش هم به خاطر اینه که من تو فایل rc به صورت رشته icon رو تعریف کردن نه عدد ثابت. نمی تونم بفهمم مشکل از کجاست!نقل قول:
Printable View
error میده. دلیلش هم به خاطر اینه که من تو فایل rc به صورت رشته icon رو تعریف کردن نه عدد ثابت. نمی تونم بفهمم مشکل از کجاست!نقل قول:
hoax3r عزیز خیلی ممنون مشکل از نوع cursor ی بود که درست کردم. حل شد.
خوب خوشحالم مشکلتون حل شد، به جواب رسیدین زودتر از من پست دادین :31:، پستمو ویراش کردم
شاد باشید
یه منو درست کردم و می خوام هر وقت exit رو زدم خارج بشه. این کد رو تو قسمت winproc() نوشتم:
حالا سوالم اینه که چرا باید پارامتر wparam رو با استفاده از LOWORD به نوع WORD تبدیل کنیم.کد:case WM_COMMAND:
{
switch( LOWORD( wparam ) )
{
case MENU_FILE_ID_EXIT:
PostQuitMessage(0);
break;
default:
break;
}
}break;
ماکروی LOWORD مثل تابع عمل میکنه؟
وقتی پیام WM_COMMAND صدا زده میشه، برایه اینکه بفهمیم کاربر چه کنترلی یا منویی رو زده باید مقدارنقل قول:
wParam این پیام رو برسی کنیم. مقدار wParam یک مقدار DWORD هست یا دو تا WORD
این دو تا WORD یکی رو با ارزش یکی رو هم کم ارزش میگن.
قسمت کم ارزش شناسه اون کنترل یا منو هست مثل MENU_FILE_ID_EXIT و
بخش با ارزش رخدادی (notification) که اتفاق افتاده رو مشخص میکنه مثل کلیک کردن و ...
ماکرو های LOWORD و HIWORD هم این مقادیر کم ارزش و با ارزش رو از یک مقدار dword میگیرن
این دو تا ماکرو به این صورت تو فایل windef.h تعریف شدن
موقعی که کامپایلر تو کد به یه ماکرو برسه اونو رو با عبارتی که براش تعریف شده جایگزین میکنهکد:#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff))
#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
شاد باشید
خیلی ممنون از توضیحات بسیار خوبتون.نقل قول:
تو تعریفش نوشته که فقط DWORD رو به WORD تبدیل می کنه. حالا از کجا می فهمه که کدوم با ارزشه و کدو کم ارزش؟ با این تعریف فقط یکی شو می شه فهمید. منظورم اینه که توی یک متغیر چه جوری دو حالت ذخیره می شه؟
خوب برای فهمیدن این موضوع بهتر اینجور بگیم، یه مقدار DWORD رو اگر بصورت یک عدد هگزادسیمال بخوایم نشون بدیم
نهایتش عدد FFFFFFFF هست هشتا F به این صورت که چهار رقم سمت چپ که یه مقدار WORD هست رو با ارزش و چهار رقم سمت راست رو کم ارزش میگن
حالا که موقعیت کلمه کم ارزش و با ارزش رو میدونیم می تونیم با یکسری از دستورات این دو رو تفکیک کنیم
اگه به تعریف ماکرو ها دقت کنیم، برای کلمه کم ارزش این مقدار تعریف شدهکد:FFFF FFFF
این چی میگه؟ یه مقدار DWORD (همون L کوچیک که داخل پرانتز) هست رو با مقدار ffff که یک مقدار هگز هست عمل AND رو روش انجام بده ( این عمل با & مشخص شده)کد:((WORD)((DWORD_PTR)(l) & 0xffff))
برای مثال عدد 1234ABCD رو اگه با FFFF این عمل رو انجام بده نتیجه
نتیجه کلمه کم ارزش میشهکد:1234ABCD
& FFFF
------------
0000ABCD
و برای کلمه با ارزش این ماکرو هست
اینجا مقدرا DWORD به اندازه 16 بیت (یا 4 بایت) به سمت راست اصطلاحا شیفت یا جابجا میشهکد:((WORD)((DWORD_PTR)(l) >> 16))
پس برای مثال قبل اینجور میشه
اینجوری این دوتا از هم جدا میشن، اگه با دو تا عملوند & و << بیشتر آشنا بشین خیلی کمکتون میکنهکد:1234ABCD
>> 16
-------------
00001234
شاد باشید
سلام شرمنده که این سوال رو اینجا مطرح می کنم ولی خیلی عجلادارم می خام یه لپ تاپ بخرم برای برنامه نویسی (از برنامه های سطح متوسط مثل c/ c++/java تابرنامه های سطح بالا).
می خواستم بدونم تمام برنامه ها هموشون در محیط xp-vista بدون مشکلی ایجاد میشوند ومشکلی درحین نوشتن برنامه
پیش نمی یاد یاباید حتما لپ تاپی راانتخاب کنم که بتونه linux-dos-98 رو ساپورت کنه؟
پیشاپیش متشکرم.
hoax3r عزیز خیلی خیلی ممنون. خیلی قشنگ و جامع توضیح دادید. حیفم اومد فقط دکمه تشکر رو بزنم.
باز هم سوال:13:
یه برنامه نوشتم که باید عرض مستطیل رو زیاد کنه و زیاد شدنش رو به صورت انیمیشن تو صفحه نشون بده.
این کد قسمت حلقه اصلی برنامه است:
حالا سوالم اینه که چرا وقتی تو این قسمت می نویسم اول پردازش رو کامل انجام می ده بعد رسم می کنه. در صورتی که می خواستم همزمان با پردازش رسم هم انجام بشه. مگه این قسمت یه حلقه بلادرنگ نیست؟کد:HDC hdc;
HPEN green_pen = CreatePen( PS_SOLID, 1, RGB( 0, 255, 0 ) );
HBRUSH red_brush = CreateSolidBrush( RGB( 255, 0, 0 ) );
int i = 40;
while(true)
{
if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE) )
{
if ( msg.message == WM_QUIT )
break;
TranslateMessage( &msg );
DispatchMessage( &msg );
} // end if
i++;
hdc = GetDC( hwnd );
SelectObject( hdc, green_pen );
SelectObject( hdc, red_brush );
Rectangle( hdc, 30, i, 100, 100 );
DeleteObject( green_pen );
DeleteObject( red_brush );
ReleaseDC( hwnd, hdc );
}
return(msg.wParam);
}