首页 > 解决方案 > win32 listview内部构建滚动条所有者绘制

问题描述

根据 msdn,消息 WM_NCCALCSIZE 处理非客户端区域,包括内部 bulid 滚动条区域。msdn 的引用让我感到困惑。任何人请告诉如何调整三个矩形(LPNCCALCSIZE_PARAMS)以覆盖内部构建滚动条区域?

    if(message==WM_NCCALCSIZE) {
    RECT rect_new;
    RECT rect_old;
    RECT client_rect_new;
    RECT client_rect_old;
    
    //adjust client rect or no-client rect
    if(wParam == TRUE) {
        LPNCCALCSIZE_PARAMS calc_param = (LPNCCALCSIZE_PARAMS)lParam;
        
        //before
        //0:new 1:old 2:old-client
        CopyRect(&rect_new,&(calc_param->rgrc[0]));
        CopyRect(&rect_old,&(calc_param->rgrc[1]));
        CopyRect(&client_rect_old,&(calc_param->rgrc[2]));

        //after 
        //0:new client 1:new 2:old
        client_rect_new = {rect_new.left,
                           rect_new.top,
                           rect_new.right+GetSystemMetrics(SM_CXHSCROLL),
                           rect_new.bottom+GetSystemMetrics(SM_CYHSCROLL)};
        CopyRect(&(calc_param->rgrc[0]),&client_rect_new);
        CopyRect(&(calc_param->rgrc[1]),&rect_new);
        CopyRect(&(calc_param->rgrc[2]),&rect_old);
        return WVR_VALIDRECTS;

图像

标签: winapi

解决方案


推荐阅读