Windows API学习-static静态文本框控件(3)


获取、修改控件文本

GetWindowText 函数用于将指定窗口的标题文本(如果存在)拷贝到一个缓存区内;如果指定的窗口是一个控件,则拷贝控件的文本。它的原型为:

Int GetWindowText(
    HWND hWnd,  //窗口/控件句柄
    LPTSTR lpString,  //指向接收文本的缓冲区指针
    Int nMaxCount  //要保存在缓冲区内的字符的最大个数
);

说明:
nMaxCount 指定要保存在缓冲区内的字符的最大个数,其中包含NULL字符。如果文本超过界限,它就被截断。
函数执行成功,返回拷贝的字符的个数。

代码举例:

//定义缓冲区
TCHAR szStaticBuf[100];
//获取 static 控件的文本
GetWindowText(hStatic, szStaticBuf, 100);

类似的,SetWindowText 函数可以用来设置窗口标题或控件文本,它的原型为:

BOOL SetWindowText(
    HWND hwnd,
    LPCTSTR lpString
);

下面的例子用来显示鼠标点击的次数:

//窗口过程
LRESULT CALLBACK WndProc(
    HWND hWnd,
    UINT message,
    WPARAM wParam,
    LPARAM lParam
){
    PAINTSTRUCT ps;
    HDC hdc;
    //必须被设置为静态变量
    static int iClick = 0;  //鼠标单击次数
    static TCHAR szTextBuf[20];  //static 控件文本(缓冲区)
    static HWND hStatic;  //static 控件句柄
    switch (message){
        case  WM_CREATE:
            hStatic = CreateWindow(
                L"static", //静态文本框的类名
                L"C语言中文网",  //控件的文本
                WS_CHILD /*子窗口*/ | WS_VISIBLE /*创建时显示*/ | WS_BORDER /*带边框*/| SS_CENTER /*水平居中*/ | SS_CENTERIMAGE /*垂直居中*/,
                20 /*X坐标*/, 20 /*Y坐标*/, 200 /*宽度*/, 100 /*高度*/,
                hWnd,  //父窗口句柄
                (HMENU)1,  //为控件指定一个唯一标识符
                hInst,  //当前程序实例句柄
                NULL
            );
            break;
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO:  在此添加任意绘图代码...
            EndPaint(hWnd, &ps);
            break;
        case WM_LBUTTONDOWN:  //鼠标左键单击消息
            iClick++;
            wsprintf(szTextBuf, TEXT("鼠标被单击%d次"), iClick);
            SetWindowText(hStatic, szTextBuf);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
    }
    return DefWindowProc(hWnd, message, wParam, lParam) ;
}

1.png