![]() |
|
טסקט טלפ - C/C++ | |
![]() |
|
ישאר דומע | םיניינע ןכות | סינוקא ןד תאמ |
![]() |
שמתשנ ,(Null terminating string תארקנ) NULL ותב תמייתסמה תזורחמ סיפדהל םיצור ונחנאשכ :TextOut היצקנופב (וניארש יפכ) TextOut(hDC, 10, 30, buffer, strlen(buffer)); :בותכנ ,(x,y םוקימב) ןולחה ףוגב תזורחמה תא סיפדהל םיצור םא TextOut(hDC, xStart, yStart, pString, iCount); תחפשמל תכייש hDC-ה תא הכירצש היצקנופ .(ךסמ) יעצמא-רשקה לש Handle-ה אוה ,hDC ,ןושאר רטמרפה תועצמאב hDC-ה תא גישהל לכונ ,רוכזכ .(GDI - Graphics Device Interface) יפרג יעצמא קשממ לש תויצקנופה שמתשנ תורחא תועדוה דוביעב .WM_PAINT העדוהה תא םידבעמ ונאשכ EndPaint-ו BeginPaint תויצקנופה .ReleaseDC-ו GetDC תויצקנופב :WndProc-ב תואבה תודוקפה תא םושרנ ,ץחלנ ילאמשה רבכעה ןצחל רשאכ תורוש יתש םושרל הצרנ םא ... case WM_LBUTTONDOWN: { char *text = "Leftmousebutton Pressed"; HDC hDC = GetDC(hWnd); TextOut(hDC, 10, 10, text, strlen(tekst)); TextOut(hDC, 10, 30, "Ready", 5); ReleaseDC(hWnd, hDC); return 0; } ךיא הארנ האבה אמגודב .ןולחה לדוג תא הנשנ רשאכ וא רחא ןולחמ רוזחנ רשאכ בוש םשריי אל םשרייש טסקטה םוקמה תא קוידב םיעדוי ונאש םושמ תאז תושעל השק כ"כ אל הז .ינמיה רבכעה ןצחל לע הציחל י"ע תאז םישוע העדוהב שמתשנ ,ךסמה תא "ןנערנ"-שכ .הזה םוקימה תא קיזחמ lParam רטמרפה .טסקטה תביתכ תא שדחל שי וב :אמגודה הנה .WM_PAINT //Textout.cpp: Demonstration of textoutput. // Link with win.obj #include "win.h" int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { win w(hInstance, iCmdShow, "textoutput", "textoutput example"); return w.result(); } LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static int x, y, Rightmousebutton=0; switch(iMsg) { case WM_LBUTTONDOWN: //will put text direct on screen { Rightmousebutton=0; //Rightmousebutton not last. HDC hDC = GetDC(hWnd); char *p = "Leftmousebutton pressed"; TextOut(hDC, 10, 10, p, strlen(p)); TextOut(hDC, 10, 30, "Ready", 5); ReleaseDC(hWnd, hDC); return 0; } case WM_RBUTTONDOWN: //Will produce text in WM_PAINT { Rightmousebutton = 1; x = LOWORD(lParam); y = HIWORD(lParam); InvalidateRect(hWnd, NULL, TRUE); return 0; } case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint (hWnd, &ps); if (Rightmousebutton) { char *p = "Rightmousebutton pressed"; TextOut(hDC, x, y, p, strlen(p)); } EndPaint (hWnd, &ps); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, iMsg, wParam, lParam); } :ךכ .רתוי רחואמ שומישל y-ו x םינתשמל סנכנ רבכעה םוקימ ,ינמיה רבכעה ןצחל לע ץחלנשכ x = LOWORD(lParam); y = HIWORD(lParam); .WndProc היצקנופל ץוחמ םג םכרע תא ורמשי ךכבו static-כ ורדגוי y-ו x םינתשמהש בושח דאמ :הדוקפה WndProc היצקנופה תא בוזענש ינפל InvalidateRect (hWnd, NULL, TRUE); ומוקמב םישל לכונ .ןולחה ףוג לכל םינווכתמ ךכבו NULL-כ רדגומ ינשה רטמרפה .ןולחה ףוג ןונערל תמרוג (TRUE) ישילשה רטמרפה .(כ"חא וב שמתשנ) ןונערל יפיצפס ןבלמ רידגמה RECT גוסמ טקייבוא לש תבותכ .םלעיהל בייח ןונערה ינפל ןולחב שיש עדימהש ךכ לע דיעמ .העדוהה םע ארקית WndProc היצקנופה ,ןכל .ןולחל תחלשנ WM_PAINT העדוהה ,InvalidateRect-ל האירקב טסקטה תא הארת ינמי רבכע ןצחל לע הציחל .(static-כ םירדגומ םה) תמדוקה םעפהמ ורמשנ y-ו x םינתשמה .רחא ןולחב הייהשמ ןולחה לא רוזחנ וא ןולחה לש ולדוג תא הנשנ רשאכ םג עיפוי הזה טסקטה .x,y-ה הדוקנב .קחמנ ,ינפל םש היהש המ לכ .יקנ ןולח לע שדחה x,y םוקימב עיפוי טסקטה ,ינמיה רבכעה ןצחל לע בוש ץחלנשכ רוזחנ וא ןולחה לש ולדוג תא הנשנ םא .ךסמה לע תורישי עיפומ טסקטה ,ילאמשה רבכעה שקמ לע םיצחול ונאשכ קחמנ אל ןולחה ףוג ,ךכל ףסונב .ילאמשה ןצחלה לע בוש ץחלנ םא קר עיפויו םלעיי טסקטה ,רחא ןולחב הייהשמ :הזכ בצמ רצוויהל לוכי ןכלו ![]() ןולחה יוקינ תא תאלממ רשא FillRect היצנקופה י"ע השענ הז ?וילא תשדוחמה הביתכה ינפל ןולחה ףוג לכ תא קוחמל לכונ ךיא גוסמ טקייבוא ךותב םירדגומ (הנותחת תינמי הניפו הנוילע תילאמש הניפ) ןבלמה ינייפאמ .רדגומ עבצ םע ןבלמה :ןבלמ רידגנ ,היצקנופל האירקה ינפל ,ןכל .היצקנופה לש ינשה רטמרפה אוהש RECT RECT rect; ארקנ ,ןולחה ףוג לכ תא ונל גציי ןבלמהש הצרנ םא .(ןבלמה לע םינותנ וב ןיא) ןכותמ קיר אוה ונרדגהש ןבלמה איה הנותחת תינמי הניפו 0,0 איה הנוילע תילאמש הניפ .ןבלמה ינייפאמ תא תאלממ רשא GetClientRect היצקנופל .ןולחה הבוגו בחור :ךכ FillRect היצקנופל ארקנ ,ןולחה תא תוקנל הצרנשכ ,וישכע GetClientRect(hWnd, &rect); // ןולחה ינייפאמ םע ןבלמ ינייפאמ יולימ FillRect(hDC, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH)); InvalidateRect היצנקופה .WM_PAINT העדוההו InvalidateRect היצקנופה םע םידבוע רשאכ יחרכה וניא ןולחה יוקינ ,וניארש יפכ .ינשה רטמרפב גצוימה ןבלמה חטש תא תוקנל רמוא TRUE ישילשה רטמרפה InvalidateRect (hWnd, NULL, TRUE); ,RECT טקייבוא לש תבותכ אוה רטמרפה םא .ןולחה ףוג חטש לכ הקוני ,NULL אוה גצוימש ןבלמה םא .גציימ אוה ותוא חטשה קר הקוני .םש היהש םדוקה טסקטה לע בתכנ טסקטהו ומצעמ ןבלמה הקנתמ אל ,FALSE אוה ישילשה רטמרפהשכ טסקט רושיי .גיצהל םיצור ומא ותוא טסקטה גצוי הב הנוילעה תילאמשה הניפה תא TextOut היצקנופל ונתנ ,וישכע דע :SetTextAlign היצקנופב שמתשנ זכרמ/לאמש/ןימיל טסקטה תא רשייל הצרנ םא .לדחמ תרירב אוה ילאמש רושיי SetTextAlign(hDC, TA_LEFT); // לאמשל רושיי SetTextAlign(hDC, TA_CENTER); // זוכרמ SetTextAlign(hDC, TA_RIGHT); // ןימיל רושיי אמגוד :ןולחה שארב תוזכרוממ תוזורחמ יתש גיצהל הצרנ םא RECT rect; GetClientRect(hWnd, &rect); int x_middle = rect.right/2; SetTextAlign(hDC, TA_CENTER); TextOut(hDC, x_middle, 10, buf1, strlen(buf1)); TextOut(hDC, x_middle, 30, buf2, strlen(buf2)); !תזורחמה זכרמל תסחייתמ TextOut היצקנופב סוחייה תדוקנ DrawText היצקנופה .רדגומ ןבלמ ךותב תורוש רפסמ ךסמה לע סיפדהל םילוכי ונא .תחא הרוש ךסמה לע הסיפדמ TextOut היצקנופה :הרושה תא הנשנו הסננ TextOut(hDC, x, y, p, strlen(p)); :אבה קולבב - WM_PAINT העדוהב תאצמנש { RECT rect; GetClientRect(hWnd, &rect); rect.top = rect.bottom/4; DrawText(hDC, "This is the output of the call of:\n" "\nDrawText\n\n" "In this text there are newline-characters\n\n" "The last argument of DrawText is\n" "DT_CENTER", -1, &rect, DT_CENTER); } :ךכ הארי ןולחה ,ינמיה רבכעה ןצחל לע הציחל רחאל ![]() :איה היצקנופה לש (Prototype) הרהצהה DrawText(hDC, pString, iCount, &rect, iFormat); .(דימת טעמכ) NULL-ב תומייתסמה תוזורחמ םיסיפדמ ונא רשאכ -1 ךרעה תא iCount-ב םישנ .תזורחמל ילמיסקמה םיותה רפסמ תא םש םישנ רחא הרקמב :תויורשפא הברה ןנשי ןורחאה רטמרפל לאמשל רושיי - DT_LEFT ןימיל רושיי - DT_RIGHT זוכרמ - DT_CENTER :תואבה תויורשפאה 3 םע תחא הרוש - DT_SINGLELINE יליע רושיי - DT_TOP יתחת רושיי - DT_BOTTOM יעצמא רושיי - DT_VCENTER ןבלממ תגרוח רשאכ הלימה תא רבוש - DT_WORDBREAK ןבלמל סנכנ טסקטה םאה הקידב ןיא - DT_NOCLIP תורושה ןיב םיחוורמ רפסמ ןתונ - DT_EXTERNALLEADING TAB ותכ "\t" ותה תא עבוק - DT_EXPANDTABS iFormat לש ןוילעה תיבה םע באט םש - DT_TABSTOP םינפוג .ןהב ןודנ ףכיתש םיכרד שולשב תאז תושעל לכונ ,לדחמה תרירבמ רחא ןפוג םיצור ונא רשאכ .SelectObject היצקנופה םע ןכ ינפל ןפוגה תא עבקנ ,DrawText וא TextOut םע טסקט םימשור ונאשכ GetStockObject היצקנופה תועצמאב ןפוג יוניש ןפוג יונישל קר אל איה GetStockObject היצקנופה .רצק חווטל ךא הטושפ איה ןפוג יונישל הנושארה ךרדה רצק רבד םושרל ליבשב קר (Non-Proportional) עובק תויתוא לדוג םע ןפוג הצרנ .םירחא םירבדל םג אלא :םינפוגל Handle ינש רידגנ .םדוקה ןפוגל רוזחל ןכמ רחאלו HFONT hFont, hOldFont; :י"ע היעבה תא רותפנ ןכמ רחאל hOldFont = (HFONT)SelectObject(hDC, GetStockObject(SYSTEM_FIXED_FONT)); TextOut(hDC, x, y, "ABCdef", 6); SelectObject(hDC, hOldFont); ינשה רטמרפכ סנכנ ומצע טקייבואה .(hDC ןאכ) יעצמא-רשקהל טקייבוא םירחוב ונא SelectObject היצקנופב .(GetStockObject היצקנופה י"ע רחבנ רשא ןפוג ונלש הרקמב) :היצקנופה י"ע םילבקתמה םינפוגה יגוס ANSI_FIXED_FONT ANSI_VAR_FONT DEVICE_DEFAULT_FONT SYSTEM_FONT SYSTEM_FIXED_FONT .ולש םינמיסה לכל הווש בחור לעב אוהש ןפוגה לע הדיעמ FIXED הלימה היצקנופה תועצמאב ןפוגה לש ולדוג תא תונשל לכונ אל .רזוח םדוקה ןפוגה ,hDC רובע רחא טקייבוא רחבנשכ .האבה היצקנופב שמתשנ ,ךכ םשל .GetStockObject CreateFont היצקנופה תועצמאב ןפוג יוניש רשייה היצקנופה ןמ רזוחה ןפוגה לש Handle-ה תא םישנ ןכמ רחאל .ונלשמ ןפוג רוציל לכונ ,וז היצקנופ תרזעב :םהבש םיבושחב קוסענ ךא םלוכב קוסענ אל .םירטמרפ 14-מ תוחפ אל םישרדנ היצקנופל .hDC-ב .DeleteObject היצקנופה י"ע םשמ ונלש ןפוגה תא קוחמל ,hDC-ל ירוקמה ןפוגה תא ונרזחהש רחאל דאמ בושח :אמגוד הנה hFont = CreateFont(40, 15, 0, 0, 500, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_SWISS, NULL); hOldFont = (HFONT) SelectObject(hDC, hFont); TextOut(hDC, 10, 40, "ABCdef", 6); SelectObject (hDC, hOldFont); DeleteObject(hFont); אוה רשאכ .ולש תושגדה תא ליכמ ישימחה רטמרפה .ןפוגה לש בחורהו הבוגה תא םיליכמ םינושארה םירטמרפה ינש ישישה רטמרפה .(900 דע האלה ןכו ןמש רתוי 200 ,הזר דאמ 100) תושגדה תא ונרובע תרחוב Windows ,ספאל הווש לעב היהי ןפוגה םאה רמוא יעיבש רטמרפ .(0) אל וא (1) תורבוחמ תויתוא לעב היהי ןפוגה םאה רמוא .(0) אל וא (1) יתחת וק ןפוגה תא םילבקמ ונא FF_SWISS-ב .(FF_SWISS-ב יתשמתשה) רתויב ןיינעמה אוה ןורחא ינפלה רטמרפה ,DECORATIVE-ב _FF-ה ירחא שמתשהל לכונ ."Serif" ןפוגה תא םילבקמ FF_ROMAN םע ,"Sans Serif" .SCRIPT וא DONTCARE ,MODERN ChooseFont היצקנופה י"ע ןפוג רוחבל שמתשמל תורשפא ןתמ :commdlg.h תרתוכה ץבוק תא לולכנ ךכ םשל .ןפוג תריחבל יטרדנטס ןולח שמתשמה ינפב גיצהל לכונ #include <commdlg.h> ![]() .(lf ול ארקנ) LOGFONT גוסמ טקייבואו (cf ול ארקנ) CHOOSEFONT הנבמה גוסמ טקייבוא רוצינ ,ןכמ רחאל .lf-ל עיבצמ ונשי ,cf טקייבואב םיאצמנה םינותנה לכ ןיב ChooseFont (&cf); .שמתשמה י"ע רחבנש ןפוגה תא lf טקייבואב םישל הלוכי ChooseFont היצקנופה ,cf-ב lf-ל עיבצמ ונתנש ןוויכמ :ב CreateFont לש הרושה תא הנשנ זא hFont = CreateFontIndirect(&lf); קר הכירצ CreateFontIndirect ,ןכל .lf טקייבואב םיאצמנ CreateFont-ל ונחלשש םינותנה לכ ,תוארל רשפאש יפכ היצקנופה י"ע ותוא קוחמל ןכמ רחאלו hDC-ב hFont רוחבל םיבייח היהנ ןכמ רחאל .טקייבואה תבותכ תא .CreateFont היצקנופה ירחא םדוקמ ונישעש יפכ DeleteObject(hFont) ![]() TextOut היצקנופה םע תורוש יתש גיצנ WM_SIZE העדוהה דוביעב .דמלנש הממ הברה הליכמ fonts.cpp תינכותה .(הווש בחור ילעב םינמיסה לכ) SYSTEM_FIXED_FONT םע גצות הנושארה הרושה .לאמש דצב תכנואמ הרוש ןכו :הדוקפה י"ע ןימיל תרשוימ וזה הרושה SetTextAlign(hDC, TA_RIGHT); :ךכ רחבנ הרבוע ןפוגה .תכנואמ הרוש הנשי ךסמה לש לאמש דצב hFont1=CreateFont(35,15,900,0,300,0,1,0,.....); טנופה תא םירצוי ונא .(ךנואמ ןכלו - הלאמש תולעמ 90) 900 אוה ישילשה רטמרפה .15 אוה בחורה ,35 אוה הבוגה העדוהה תארקנ רשאכ ותוא םיקחומו (ןולח תריצי - WM_CREATE) תעדוה םע האירקב קר .רבכעה לש ילאמשה ןצחלה לע ץחלנ רשאכ עיפומ ןפוגל חיש-וד ןולח .(ןולח תריגס - WM_DESTROY) DrawText היצקנופב שמתשנ .רחבנ רשא ןפוגב "Choice of the user!" הרושה עיפות ,חיש-ודה-ןולחמ הרזחב הרושה בתכית וכותלש ןבלמה .ולש יכנאהו יקפואה רושייה תא עובקל לכונו תחא הרוש ללוכ טסקטהש ינפמ .ןולחה תיתחתב עיפוי אוה ןכל .ןולחה הבוגמ 1/3 לולכת התרושש הנוילע תילאמש הניפ לולכי //fonts.cpp: The usuage of other fonts. // Links with win.obj #include "win.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { win w(hInstance, iCmdShow, "fonts", "fonts: Press the leftmousebutton"); return w.result(); } LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HDC hDC; RECT rect; static HFONT hFont1, hOldFont; switch (iMsg) { case WM_CREATE: hFont1 = CreateFont(35,15,900, 0, 300, 0, 1, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_SWISS, NULL); return 0; case WM_SIZE: hDC = GetDC(hWnd); hOldFont = (HFONT) SelectObject (hDC, GetStockObject(SYSTEM_FIXED_FONT)); GetClientRect(hWnd, &rect); SetTextAlign(hDC, TA_RIGHT); TextOut(hDC, rect.right-10, 10, "SYSTEM_FIXED_FONT: WWW has the same width as lll", 47); SelectObject(hDC, hFont1); GetClientRect(hWnd, &rect); SetTextAlign(hDC, TA_LEFT); TextOut(hDC, 10, rect.bottom - 10, "CreateFont used", 15); ReleaseDC(hWnd, hDC); return 0; case WM_LBUTTONDOWN: { LOGFONT lf; HFONT hFont2; CHOOSEFONT cf; cf.lStructSize = sizeof(cf); cf.hwndOwner = hWnd; cf.lpLogFont = &lf; cf.Flags = CF_SCREENFONTS | CF_EFFECTS; cf.rgbColors = RGB(255, 0, 0); //RED cf.nFontType = SCREEN_FONTTYPE; ChooseFont(&cf); //show the dialogwindow //Create and show the font the user has choosen hFont2 = CreateFontIndirect(&lf); hDC = GetDC(hWnd); SelectObject(hDC, hFont2); SetTextColor(hDC, cf.rgbColors); GetClientRect(hWnd, &rect); rect.top = rect.bottom/3; DrawText(hDC, "Choice of the user!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); ReleaseDC(hWnd, hDC); DeleteObject(hFont2); return 0; } case WM_DESTROY: DeleteObject(hFont1); PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, iMsg, wParam, lParam); } |