
18-03-2006, 19:21
|
 |
|
|
חבר מתאריך: 04.08.02
הודעות: 4,468
|
|
|
...
נראה לי שבמהלך הלימוד על WinAPI, שכחת לגמרי את היסוד שעליו היא נבנתה.
כל דבר הינו חלון. כפתור? חלון. תיוות טקסט? חלון.
לגביי קליטת מס' ולצייר כמות שורות בהתאם לקלט -> קלוט את המס' תשתמש ב-CreateWindow/CreateWindowEx ע"מ ליצור N לייבלים (Labels) או תוות טקסט.
לגביי יצירת Modeless Dialog (אודה אם מישהו ייתרגם זאת לעברית )
CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_OF_DIALOG),
NULL/*parent window*/, DialogProcedure);
את הפרמטרים אתה יכול לקרוא באתר של MSDN.
בקצרה, התהליך הוא די דומה ליצירת חלון, רק תשכח מכל הסיבוך של WNDCLASSEX.
את הדיאלוג תייצר ותכניס אותו ב-resource.
תפעיל את התוכנית, הגדר Handle, MSG וכו'.
תיצור את הדיאלוג בעזרת הפונקציה הנ"ל (לא בעזרת DialogBox, זכור)
תקבל את ה"הודעות" כרגיל, רק זכור דבר נוסף, בלולאת GetMessage, אתה חייב לזרוק את כל ההודעות שלא קשורות לדיאלוג, תשתמש ב-IsDialogMessage.
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
if(!IsDialogMessage(g_hToolbar, &Msg))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
לגביי יצירת פקדים on the fly, אחרי שהבנת שהעקרון מאחורי WINAPI זה שהכל חלון, אמור להיות משימה קלה - פשוט ליצור אותם בעזרת CreateWindow.
נניח אתה רוצה ליצור תוות טקסט בצורה דינאמית
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 0, 0, 100, 100, hwnd, /* HMENU*/NULL, GetModuleHandle(NULL), NULL);
אין הרבה מה לזכור פה, תקרא על הכל ב-MSDN.
בכללי, הפרמטר השני מציין את ה"טיפוס" של ה"חלון" שאתה רוצה לייצר.
במקרה שלנו, שמתי EDIT, כלומר, EDIT BOX.
אני אצרף דוגמא עוד הערב, כרגע אין לי מי יודע מה זמן.
בהצלחה.
_____________________________________
C pogrammers never die. They are just cast into void.
נערך לאחרונה ע"י scripter בתאריך 18-03-2006 בשעה 19:24.
|