无标题栏窗口的有关问题
无标题栏窗口的问题
我用SDK实现了一个无标题栏的窗口,将其中一部分作为标题栏,为了能鼠标拖动窗口我拦截了WM_NCHITTEST消息,代码如下:
x = LOWORD(lParam);
y = HIWORD(lParam);
Point.x = x;
Point.y = y;
ScreenToClient(hWnd, &Point);
if (PointInRegion(Point.x, Point.y, CLOSE_BUTTON_LEFT, CLOSE_BUTTON_RIGHT, CLOSE_BUTTON_TOP, CLOSE_BUTTON_BOTTOM))
{
return HTCLOSE;
}
if (NONGLI_PointInRegion(Point.x, Point.y, MIN_BUTTON_LEFT, MIN_BUTTON_RIGHT, MIN_BUTTON_TOP, MIN_BUTTON_BOTTOM))
{
return HTMINBUTTON;
}
if (NONGLI_PointInRegion(Point.x, Point.y, 0, WINDOW_TITLE_WIDTH, 0, WINDOW_TITLE_HEIGHT))
{
return HTCAPTION;
}
return DefWindowProc(hWnd, Message, wParam, lParam);
问题是
如果不拦截WM_NCLBUTTONDOWN消息,必须双击“标题栏”区域才能得到消息WM_NCLBUTTONUP,这时要双击自定义的关闭和最小化按钮(在自定义的标题栏区域上)才能进行相应的操作。
如果拦截了M_NCLBUTTONDOWN消息,则不能鼠标拖动,但却能单击收到消息WM_NCLBUTTONUP(也就能单击自定义的关闭和最小化按钮才能进行相应的操作)
这是什么原因,我想要的是按下鼠标左键不放能拖动窗口,而且能单击自定义的关闭和最小化按钮进行关闭和最小化操作!
------解决方案--------------------
没有得到双击消息,可能是由于窗口没有属性CS_DBLCLKS
我用SDK实现了一个无标题栏的窗口,将其中一部分作为标题栏,为了能鼠标拖动窗口我拦截了WM_NCHITTEST消息,代码如下:
x = LOWORD(lParam);
y = HIWORD(lParam);
Point.x = x;
Point.y = y;
ScreenToClient(hWnd, &Point);
if (PointInRegion(Point.x, Point.y, CLOSE_BUTTON_LEFT, CLOSE_BUTTON_RIGHT, CLOSE_BUTTON_TOP, CLOSE_BUTTON_BOTTOM))
{
return HTCLOSE;
}
if (NONGLI_PointInRegion(Point.x, Point.y, MIN_BUTTON_LEFT, MIN_BUTTON_RIGHT, MIN_BUTTON_TOP, MIN_BUTTON_BOTTOM))
{
return HTMINBUTTON;
}
if (NONGLI_PointInRegion(Point.x, Point.y, 0, WINDOW_TITLE_WIDTH, 0, WINDOW_TITLE_HEIGHT))
{
return HTCAPTION;
}
return DefWindowProc(hWnd, Message, wParam, lParam);
问题是
如果不拦截WM_NCLBUTTONDOWN消息,必须双击“标题栏”区域才能得到消息WM_NCLBUTTONUP,这时要双击自定义的关闭和最小化按钮(在自定义的标题栏区域上)才能进行相应的操作。
如果拦截了M_NCLBUTTONDOWN消息,则不能鼠标拖动,但却能单击收到消息WM_NCLBUTTONUP(也就能单击自定义的关闭和最小化按钮才能进行相应的操作)
这是什么原因,我想要的是按下鼠标左键不放能拖动窗口,而且能单击自定义的关闭和最小化按钮进行关闭和最小化操作!
------解决方案--------------------
没有得到双击消息,可能是由于窗口没有属性CS_DBLCLKS