كيفية تحقيق تأثير نوع Pushbutton باستخدام نقار الصورة النقطية

StackOverflow https://stackoverflow.com/questions/3581619

  •  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 الشفرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top