- Xét xem vị trí đang dò có phải là space hoặc tab - Vòng loop kết thúc khi dò được vị trí space hoặc tab, hoặc dò đến vị trí đầu chuỗi (vị trí 1).
* Kết quả đạt được: Vị trí đầu của từ.
- Từ vị trí mIndex, đặt vòng loop quét dò qua phải - Xét xem vị trí đang dò có phải là space hoặc tab - Xét xem vị trí đang dò có phải là space hoặc tab - Vòng loop kết thúc khi dò được vị trí space hoặc tab, hoặc dò đến vị trí cuối chuỗi (chiều dài chuỗi). * Kết quả đạt được: Vị trí cuối của từ.
tại: tmAveCharWidth (hàm GetTextMetrics) pt (mIndex) theo công thức:
mIndex=(tđộ.x pt - tđộ.x TextOut)/tmAveCharWidth - Cập nhật CP: Gán lại toạ độ TextOut là CP - Trái/giữa/phải: Chỉnh toạ độ trái/phải - Đỉnh/đáy/baseline: Chỉnh toạ độ trên/dưới
suy ra toạ độ của ký tự mIndex trên màn hình
cho đến khi pt qua trái. cho đến khi pt qua phải.
SVTH : Lương Cao Hoài Tâm Lớp TH40
- Từ vị trí mIndex, đặt vòng loop quét dò qua trái - Xét xem vị trí đang dò có phải là space hoặc tab - Xét xem vị trí đang dò có phải là space hoặc tab - Vòng loop kết thúc khi dò được vị trí space hoặc tab, hoặc dò đến vị trí đầu chuỗi (vị trí 1).
* Kết quả đạt được: Vị trí đầu của từ.
- Từ vị trí mIndex, đặt vòng loop quét dò qua phải - Xét xem vị trí đang dò có phải là space hoặc tab - Xét xem vị trí đang dò có phải là space hoặc tab - Vòng loop kết thúc khi dò được vị trí space hoặc tab, hoặc dò đến vị trí cuối chuỗi (chiều dài chuỗi). * Kết quả đạt được: Vị trí cuối của từ.
Bắt đầu
Chuyển toạ độ xuất text trong TextOut; ExtTextOut từ logic qua fullscreen: hàm GetViewportOrgEx; GetDCOrg
pt nằm trong khung bao? (dùng hàm PtInRect)
- Lấy bề rộng ký tự trung bình của font chữ hiện tại: tmAveCharWidth (hàm GetTextMetrics) - Tính chỉ số vị trí ký tự trong dòng text tại toạ độ pt (mIndex) theo công thức:
mIndex=(tđộ.x pt - tđộ.x TextOut)/tmAveCharWidth
Trích từ tại vị trí vừa tính được trong chuỗi (Xin xem lưu đồ kế tiếp)
Kết thúc
LƯU ĐỒ HÀM TRÍCH TỪ TRONG DÒNG TEXT TẠITỌA ĐỘ FullScreen pt (GTDLL - GetWordUnderPoint) TỌA ĐỘ FullScreen pt (GTDLL - GetWordUnderPoint)
Tính khung bao của dòng text (hàm GetTextExtent) Hiệu chỉnh lại vị trí khung bao và toạ độ xuất text tùy theo giá trị của GetTextAlign như sau:
- Cập nhật CP: Gán lại toạ độ TextOut là CP - Trái/giữa/phải: Chỉnh toạ độ trái/phải - Đỉnh/đáy/baseline: Chỉnh toạ độ trên/dưới
Tinh chỉnh lại mIndex bằng cách:
- Tính khung bao chuỗi text từ 1 đến mIndex để suy ra toạ độ của ký tự mIndex trên màn hình - Xét xem pt nằm bên trái hay bên phải mIndex - Nếu pt bên phải thì tăng mIndex rồi loop lại cho đến khi pt qua trái.
- Nếu pt bên trái thì giảm mIndex rồi loop lại cho đến khi pt qua phải.
Yes
Bắt đầu
- Từ vị trí mIndex, đặt vòng loop quét dò qua trái - Xét xem vị trí đang dò có phải là space hoặc tab - Xét xem vị trí đang dò có phải là space hoặc tab - Vòng loop kết thúc khi dò được vị trí space hoặc tab, hoặc dò đến vị trí đầu chuỗi (vị trí 1).
* Kết quả đạt được: Vị trí đầu của từ.
Kết thúc
LƯU ĐỒ GIẢI THUẬT TRÍCH TỪ TRONG DÒNG TEXTTẠI VỊ TRÍ mIndex (mở rộng lưu đồ GetWordUnderPoint) TẠI VỊ TRÍ mIndex (mở rộng lưu đồ GetWordUnderPoint)
- Từ vị trí mIndex, đặt vòng loop quét dò qua phải - Xét xem vị trí đang dò có phải là space hoặc tab - Xét xem vị trí đang dò có phải là space hoặc tab - Vòng loop kết thúc khi dò được vị trí space hoặc tab, hoặc dò đến vị trí cuối chuỗi (chiều dài chuỗi). * Kết quả đạt được: Vị trí cuối của từ.