ورود

View Full Version : فرستادن پیغام BN_CLICKED به یک باتون به وسیله کیبورد.



shahmohammadi
دوشنبه 17 بهمن 1390, 11:10 صبح
با سلام به همه دوستان.
من می خام با فشردن کلید 0 از صفحه کلید دستوراتی که برای یک باتون با نام هندل hB0 و آیدی ID_B0 هست اجرا شه. برای همین دستور زیر رو در داخل wndProc نوشتم.:
case WM_KEYDOWN:
switch(wParam)
{
case 0x60:
SendMessage(hwnd,WM_COMMAND,MAKEWPARAM(ID_B0,BN_CL ICKED),reinterpret_cast<LPARAM>(hB0));

وقتی برنامه شروع می شه و قبل هر کاری با کیبورد کار میکنم، این کد درست کار میکنه، ولی وقتی روی یه باتون کلیک می کنم دیگ این کد کار نمی کنه.

shahmohammadi
دوشنبه 17 بهمن 1390, 16:52 عصر
الان میبینم که مشکل اصلا از فرستادن پیغام نیست. کلا هر دستور دیگه ای هم که در case بالا می نویسم تازمانی اعتبار داره که روی کنترلی کلیک نکرده باشم. وقتی روی یک کنترل کلیک می کنم از اون به بعد در برنامه انگار پیغام WM_KEYDOWN فرستاده نمی شه که دستوراتش هم اجرا شه.

Negative_Se7en
دوشنبه 17 بهمن 1390, 20:24 عصر
احتمالا به خاطر اینه که وقتی شما روی اون Button کلیک میکنی Focus روی Button کلیک شده Set میشه.
و برای همین Keystroke Message ها به Windowی Focus شده (یعنی Button) فرستاده میشه نه Windowیی که شما برای اون WndProc نوشتید.

shahmohammadi
دوشنبه 17 بهمن 1390, 21:28 عصر
ممنون. درسته.
بعد از خوندن پست شما، برای هر کدوم از باتون ها در case های WM_COMMAND کد SetFocus(hwnd); رو نوشتم، مشکل حل شد.