如何在状态栏上方移动窗口默认滚动条?

时间:2009-03-07 22:54:55

标签: c++ c windows winapi

每个程序都有状态栏上方的滚动条。对?好吧,不是我的。

当我尝试在我的程序中设置自己的滚动条时,我惊讶地让它们工作!所以我设法让状态栏工作了!欢呼! :-) ...但状态栏在滚动条上方,当它应该在滚动条下方。如何移动滚动条?我找不到任何关于移动滚动条的功能。除非我自己创建一个滚动条窗口,但它没有很好地工作(它有一些奇怪的错误:当我使用默认高度时,它变成完全不可见的滚动条,当我使用我定义的高度时,滚动条有Windows98主题或某事o_O !)

这是我的状态栏创建代码:

// Create status bar
hStatus = CreateWindowEx(
    0, 
    STATUSCLASSNAME, 
    NULL, 
    WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, 
    0, 0, 0, 0, 
    hWnd, 
    (HMENU)IDC_MAIN_STATUS, 
    GetModuleHandle(NULL), 
    NULL
);

和窗口创建:

if (!(hWnd=CreateWindowEx(dwExStyle,            // Extended Style For The Window
    "OpenGL",                   // Class Name
    title,                      // Window Title
    dwStyle |                   // Defined Window Style
    WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | 
    WS_CLIPCHILDREN | WM_HSCROLL | WM_VSCROLL,  // Required Window Style
    0, 0,                       // Window Position
    WindowRect.right-WindowRect.left,       // Calculate Window Width
    WindowRect.bottom-WindowRect.top,       // Calculate Window Height
    NULL,                       // No Parent Window
    NULL,                       // No Menu
    hInstance,                  // Instance
    NULL)))                     // Dont Pass Anything To WM_CREATE

必须有一些我尚未意识到的巧妙技巧,任何人都可以告诉我如何正确地做到这一点?

1 个答案:

答案 0 :(得分:2)

运行记事本并使用spy ++检查它,您将看到带有滚动条的区域和状态栏是两个具有共同父项的对等窗口。您也需要这样做,然后在父窗口改变大小或位置时使用SetWindowPos()将两个窗口相对于彼此定位。