限定矩形和对齐模式

基准点可以设置在限定矩形的“任意位置”

(位置选择具体查看http://bbs.fishc.com/thread-49489-1-1.html

1)而限定矩形的理解:

     1.1)不是窗口的内边框。

     1.2)而是字符串本身的外边框~~

2)你设置的坐标,将会是基准点的坐标~~

158e6156-a87c-48d5-9a7a-4a87fd68a0ed

知道了这些之后,实现什么右对齐就简单了。

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

    HDC hdc;

    PAINTSTRUCT ps;

    RECT rect;

    TCHAR szBuffer1[128] = TEXT("12345");

    TCHAR szBuffer2[128] = TEXT("12");

    TCHAR szBuffer3[128] = TEXT("12SDFSDF345");

    TEXTMETRIC tm;

    int cyoff = 0;

    switch (message)

    {

    case WM_PAINT:

    hdc = BeginPaint(hwnd, &ps);

    GetClientRect(hwnd, &rect);

    DrawText(hdc, TEXT("大家好,这是我的第一个窗口程序!"), -1, &rect,

    DT_SINGLELINE | DT_CENTER | DT_VCENTER);

    EndPaint(hwnd, &ps);

    return 0;

 

    case WM_LBUTTONDOWN:

    hdc = GetDC(hwnd);

    LineTo(hdc,200,200);

    GetTextMetrics(hdc,&tm);

    cyoff = tm.tmHeight + tm.tmExternalLeading;

    SetTextAlign(hdc,TA_RIGHT);

    TextOut(hdc,200,200 + cyoff*0,szBuffer1,lstrlen(szBuffer1));

    TextOut(hdc,200,200 + cyoff*1,szBuffer2,lstrlen(szBuffer2));

    TextOut(hdc,200,200 + cyoff*2,szBuffer3,lstrlen(szBuffer3));

    ReleaseDC(hwnd,hdc);

    return 0;

 

    case WM_DESTROY:

    PostQuitMessage(0);

    return 0;

    }

 

    return DefWindowProc(hwnd, message, wParam, lParam);

}

 

效果图,特意画了一条线做对比~:

8b9b84a7-ed75-4f00-8af8-0d77cfc63297

关键语句是:

SetTextAlign(hdc,GetTextAlign(hdc) | TA_RIGHT);

TA_RIGHT表示将基准点设置在限定矩形的右边上。

另外一种写法是:

SetTextAlign(hdc,TA_RIGHT);

因为基准点的默认值是TA_NOUPDATECP,TA_LEFT,TA_TOP

而他们的值都是0.所以也没必要“或一下”。

posted @ 2016-07-06 17:07  宋桓公  阅读(275)  评论(0编辑  收藏  举报