C++ 可拖动无边框窗口问题

标签 c++ winapi visual-studio-2012

我正在设计一个自定义窗口边框,我在顶部放了一个位图作为拖动条。这有效,但是当我尝试拖动窗口时,它会将自己置于两个不同的区域并在两者之间闪烁。这是一个视频:

http://dl.dropbox.com/u/85700751/capture-1.avi

当窗口闪烁时,我试图拖动它(由于某种原因它没有显示我的光标)。这是我的拖动代码:

case WM_LBUTTONDOWN: {
    int posX = LOWORD(lParam);
    int posY = HIWORD(lParam);
    if((isDragging==false)&&(posX>4)&&(posX<470)&&(posY>4)&&(posY<24))
        {
            isDragging = true;
            ClipCursor(rect);
            oldCursorX = posX;
            oldCursorY = posY;
        }
    }
    break;
case WM_LBUTTONUP: {
    isDragging = false;
    ClipCursor(NULL);
    }
    break;
case WM_MOUSEMOVE: {
        if(isDragging)  {
            SetWindowPos(hWnd, NULL, LOWORD(lParam)-oldCursorX, HIWORD(lParam)-oldCursorY, 500, 500, NULL);
        }
    }
    break;

最佳答案

简单地回复 WM_NCHITTEST 通常是最简单的。对于该消息,LPARAM 将具有鼠标点击的 X 和 Y 坐标(与 WM_LBUTTONDOWN 相同)。如果它们在您的可拖动区域内,只需返回 HTCAPTION。系统会自动为你处理所有的拖动逻辑。

关于C++ 可拖动无边框窗口问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466196/

相关文章:

vb.net - 'Default' 和 'Legacy ObjectContext' 代码生成之间有根本区别吗

tfs - 将 TFS 2010 项目(历史、工作项、代码等)移动到 TFS 2012

c++ - c++中比较vector等随机访问迭代器时,<>的比较内容是什么?

C++ 指针目标返回错误值

c++ - 是否有基本 win32 C++ 的 TRACE 语句?

c++ - 如何将Std::set_terminate与SetUnhandledExceptionFilter一起使用?

razor - 如何更改Visual Studio 2012 Razor 颜色

c++ - 为什么我不能使用继承来实现C++中的接口(interface)?

c++ - 限制(放大器)功能的默认参数

c++ - 强制资源从非 mfc 应用程序中的 dll 加载的 WTL 方式? (我们使用的是 WTL/ATL,而不是直接的 win32)