كيفية تعيين التركيز إلى زر بحيث الحدود والتركيز خط منقط مرئية؟

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

سؤال

وأنا خلقت تطبيق يستند إلى الحوار بسيطة، وفي الافتراضي أضاف CDialog ثلاثة أزرار (عن طريق السحب وإفلاتها) باستخدام محرر برنامج Visual Studio.

والافتراضي موافق والغاء الأزرار هناك أيضا.

وأريد أن تعيين التركيز على زر +1 عند النقر فوق زر 3.

وأنا وضعت الملكية شقة إلى true في خصائص أزرار موي.

وأنا مشفرة هذا:

void CbuttonfocusDlg::OnBnClickedButton3()
{
    // TODO: Add your control notification handler code here
    GetDlgItem(IDC_BUTTON1)->SetFocus();

    Invalidate();

}

ولكن بودر في BUTTON1 ويوجه أبدا. ويوجه الإقحام (خط منقط تشير إلى التركيز) إلا إذا ضغطت TAB أي وقت قبل النقر على زر 3.

وأريد الزر لتبدو تماما كما يبدو بعد أن فوقه. عرض خط منقط داخل زر برمجيا، لن يكون زائد.

وماذا أريد:

وماذا أحصل على:

هل كانت مفيدة؟

المحلول 3

وهذا توجه الحدود سميكة حول الزر:

static_cast<CButton*>(GetDlgItem(IDC_BUTTON1))->SetButtonStyle(BS_DEFPUSHBUTTON);

وهناك طريقة أكثر أناقة للقيام بذلك سيكون لتعريف متغير عضو CButton في CbuttonfocusDlg وربطه إلى السيطرة IDC_BUTTON1، ثم استدعاء

this->m_myButton.SetButtonStyle(BS_DEFPUSHBUTTON);

وهذا يجعل الزر الذي أنا تعيين التركيز على زر افتراضي، ولكن لاحظ أنه عندما يذهب التركيز إلى عنصر تحكم (داخل الحوار) ليست زر، والزر الافتراضي هو مرة أخرى على الزر الافتراضي الأصلي مجموعة في المورد الحوار، في هذه الحالة على زر "موافق".

نصائح أخرى

استخدم WM_NEXTDLGCTL.

ريمون تشن "كيفية تعيين التركيز في الحوار مربع ":

void SetDialogFocus(HWND hdlg, HWND hwndControl)
{
    SendMessage(hdlg, WM_NEXTDLGCTL, (WPARAM)hwndControl, TRUE);
}

وعن طريق استدعاء UpdateWindow، يجري إعادة رسم الزر قبل تغيير التركيز يمكن أن تصبح نافذة المفعول. يجب أن يكون يبطل كافيا في حد ذاته، وسوف تحصل على إعادة رسم النافذة عندما يستقر كل شيء إلى أسفل.

وأنا أتابع اقتراح جويل. ولكن مختلفة قليلا مع API المستخدمة في ذلك الارتباط، بلدي واحد هو:

وPostMessage (WM_NEXTDLGCTL، (WPARAM) (pwnd-> GetSafeHwnd ())، TRUE)؛

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