回 帖 发 新 帖 刷新版面

主题:如何在WM_LBUTTONDOWN 下更新客户区

我的代码:
static char *p ="XXXX";
RECT tect;
TEXTMETRIC tm;
^^^^^
     switch(message)
{
case WM_PAINT:
    
    hdc = BeginPaint(hwnd,&ps);
    
    TextOut(hdc,200,200,p,sizeof(p));  //B

    Endpaint(hwnd,&ps);

    return 0;

case WM_LBUTTONDOWN:

    InvaledateRect(hwnd,rect);

    hdc = GetDC(hwnd,&ps);

    tm.XXX = XXXX;
    
    以下忘了,不过都是定义正确.

   TextOut(^^^^^^^^);  //A

    Release(hdc);

    return 0;

问题是,为什么我按了左键后,A处的文本内容出现在客户区,而B处的内容仍还在?
当左键按下后,如何清除B处的内容,只剩内容A呢?

回复列表 (共4个回复)

沙发

看起来,那个 rect 有一点问题。

板凳

那是我打错了,原始代码没问题,可以运行,就是达不到我要的效果,再问问?

3 楼

我是说,那个 rect 有没有包含 B 的区域?没有 B 的区域,他不会对 B 刷新的。

4 楼

问题解决了!

要这样:
case WM_LBUTTONDOWN :
    
    InvalidateRect(hwnd,NULL,true);
    
    BeginPaint(hwnd,&ps);  //还是用BeginPaint函数

    TextOut(hdc,200,200,p,lstrlen(p));

    EndPaint(hwnd,&ps);

    return 0;
    

我来回复

您尚未登录,请登录后再回复。点此登录或注册