سؤال

باستخدام Corefoundation، يمكنني عرض مربع حوار تنبيه مع ما يلي:

CFUserNotificationDisplayAlert(0.0, 
                               kCFUserNotificationPlainAlertLevel, 
                               NULL, NULL, NULL, 
                               CFSTR("Alert title"), 
                               CFSTR("Yes?), 
                               CFSTR("Affirmative"), 
                               CFSTR("Nah"), 
                               NULL, NULL);

كيف يمكنني تكرار هذا باستخدام واجهة برمجة تطبيقات Windows C؟ الأقرب الذي حصلت عليه هو:

MessageBox(NULL, "Yes?", "Alert title", MB_OKCANCEL);

ولكن هذه الرموز الصلبة "موافق" و "إلغاء" كألقب زر، وهذا ليس ما أريد. هل هناك أي طريقة حول هذا، أو وظيفة بديلة لاستخدامها؟

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

المحلول

يمكنك استخدام SetWindowText لتغيير الأسطورة على الأزرار. نظرا لأن MessageBox () يحظر تدفق التنفيذ الذي تحتاجه بعض الآلية للحصول على جولة هذا - يستخدم الرمز أدناه مؤقتا.

أعتقد أن رمز FindWindow قد يعتمد على عدم وجود أحد الوالدين ل MessageBox () لكنني لست متأكدا.

int CustomMessageBox(HWND hwnd, const char * szText, const char * szCaption, int nButtons)
{
    SetTimer( NULL, 123, 0, TimerProc );
    return MessageBox( hwnd, szText, szCaption, nButtons );
}

VOID CALLBACK TimerProc(      
    HWND hwnd,
    UINT uMsg,
    UINT_PTR idEvent,
    DWORD dwTime
)
{
    KillTimer( hwnd, idEvent );
    HWND hwndAlert;
    hwndAlert = FindWindow( NULL, "Alert title" ); 
    HWND hwndButton;
    hwndButton = GetWindow( hwndAlert, GW_CHILD );
    do
    {
        char szBuffer[512];
        GetWindowText( hwndButton, szBuffer, sizeof szBuffer );
        if ( strcmp( szBuffer, "OK" ) == 0 )
        {
            SetWindowText( hwndButton, "Affirmative" );
        }
        else if ( strcmp( szBuffer, "Cancel" ) == 0 )
        {
            SetWindowText( hwndButton, "Hah" );
        }
    } while ( (hwndButton = GetWindow( hwndButton, GW_HWNDNEXT )) != NULL );
}

نصائح أخرى

تدعم وظيفة MessageBox Windows فقط عدد محدود من الأنماط. إذا كنت تريد أي شيء أكثر تعقيدا، فما يتم توفيره، فستحتاج إلى إنشاء مربع الحوار الخاص بك. يرى رسالة للحصول على قائمة أنواع صناديق الرسائل المحتملة.

إذا قررت إجراء مربع الحوار الخاص بك، فأنا أقترح النظر إلى صندوق المحادثة وظيفة ويندوز.

إذا كنت على استعداد لربط نفسك بنظام Windows Vista وما فوق، فقد ترغب في النظر في "TaskDialog."وظيفة. أعتقد أنها سوف تسمح لك أن تفعل ما تريد.

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