كيفية تحقيق تأثير نوع Pushbutton باستخدام نقار الصورة النقطية
-
01-10-2019 - |
سؤال
مرحبًا ، لدي مشكلة تتعلق باستخدام نافذة مربع الحوار التي تم تمكينها في صورة نقطية. لقد قمت بإنشاء تصميم نوع لوحة المفاتيح وأرغب في الحصول على الإدخال من خلال لوحة المفاتيح أيضًا. عندما أستخدم الماوس الذي يمكنني الحصول عليه مضغوط وأيضًا جميع الأزرار تعمل بشكل جيد - الصور الأخرى DEFAULT,SELECTED,DISABLED
.. كل ذلك يتم تحميله والعمل منذ أن أستخدم الوظيفة هنا m_BtnBtn1Ctrl.LoadBitmaps
، ولكن بعد ذلك أي مفتاح يتم ضغطه على لوحة المفاتيح والطرف المقابل على الشاشة غير قادر على فعل الشيء نفسه كما تمكنت من القيام بذلك مع النقر على الماوس (واستخدام Loadbitmaps()
وظيفة ).
أنا أستخدم هذه الوظائف الثلاثة لتحقيق نفس الإجراء وتأثير ذلك باستخدام الماوس
loadbitmap ()
setbitmap ()
إبطال ()
لقد جربت أيضًا قطعة الكود هذه
HBITMAP hbm = (HBITMAP)LoadImage(NULL, "\\res\\Selected\\bitmap21.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
و
bitmap.Attach((HBITMAP)LoadImage(NULL, "\\res\\Selected\\bitmap21.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION));
لكن يبدو أن هؤلاء لا يعطون تأثير الزر المضغوط على الرغم من أنهم يعملون داخليًا.
شكرا وتحياتي sayonee
انهيار
BOOL KeyBoard_press::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
CString strTemp;
if (pMsg->message == WM_KEYDOWN)
{
if ( pMsg->wParam == 0x41 || pMsg->wParam == 0x61) //check for both 'a' and 'A'
OnBtnBtn1();
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_DELETE ||
pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_TAB ||
pMsg->wParam == VK_UP || pMsg->wParam == VK_DOWN || GetKeyState (VK_CONTROL))
{
::TranslateMessage (pMsg);
::DispatchMessage (pMsg);
return TRUE; // DO NOT process further
}
}
return CDialog::PreTranslateMessage(pMsg);
}
المحلول
بقدر ما أفهم ، لديك سلسلة من الأزرار التي تحاكي تخطيط لوحة مفاتيح الكمبيوتر. عندما يضغط المستخدم على مفتاح على لوحة المفاتيح ، تحتاج إلى محاكاة زر انقر فوق مربع الحوار الخاص بك. لقد قدمت صورة نقطية لكل حالة من الزر.
للقيام بذلك ، أود معالجة WM_KEYDOWN
و WM_KEYUP
رسائل. في المعالجات ، استخدم بعض تعيين المفتاح إلى مثيل الزر الفعلي. ثم ، أرسل BM_SETSTATE
إلى التحكم في الزر.
ثم ، معالجة WM_COMMAND
رسالة من كل من الأزرار وتحقق من BN_CLICKED
الشفرة.