我现在想写个SDK的窗体。我把最大化,最小化,关闭等按钮画上图后,
响应这个消息。:
case WM_NCLBUTTONDOWN:
Title_Down_Up=true;
point_Down.x=LOWORD (lParam) ;
point_Down.y=HIWORD (lParam) ;
DrawTitleMax(hwnd,hInstance,point,message);
return 0;//DefWindowProc (hwnd, message, wParam, lParam) ;如果return 0;就不能移动窗体了。
如果return DefWindowProc (hwnd, message, wParam, lParam) ;就会出现按最小化,或最大化或最关闭按钮时。窗体的原来的那个灰色的窗体最小化,最大化或关闭按钮就出来了的呢。那不等于没有画吗?
能告诉我怎么解决吗?谢谢。
响应这个消息。:
case WM_NCLBUTTONDOWN:
Title_Down_Up=true;
point_Down.x=LOWORD (lParam) ;
point_Down.y=HIWORD (lParam) ;
DrawTitleMax(hwnd,hInstance,point,message);
return 0;//DefWindowProc (hwnd, message, wParam, lParam) ;如果return 0;就不能移动窗体了。
如果return DefWindowProc (hwnd, message, wParam, lParam) ;就会出现按最小化,或最大化或最关闭按钮时。窗体的原来的那个灰色的窗体最小化,最大化或关闭按钮就出来了的呢。那不等于没有画吗?
能告诉我怎么解决吗?谢谢。
二是窗体大小改变比如上下左右,右上,右下,左上,左下;等消息是哪些呢?
楼上继续呀。
我屏蔽掉这句话,用你说的
return HTCAPTION;
还是不起作用喔?
能具体点吗?谢谢
if (wParam == HTCAPTION)
{
DefWindowProc (hwnd, message, wParam, lParam) ;
// your drawing here
}
return FALSE;
{
Title_Down_Up=true;
point_Down.x=LOWORD (lParam) ;
point_Down.y=HIWORD (lParam) ;
DrawTitleMax(hwnd,hInstance,point,message);DWORD dwStyle = ::GetWindowLong(hWnd, GWL_STYLE);
SetWindowLong(hWnd, GWL_STYLE, dwStyle ^ WS_SYSMEN);
long lRet = DefWindowProc (hwnd, message, wParam, lParam) ;SetWindowLong(hWnd, GWL_STYLE, dwStyle | WS_SYSMEN);
return lRet;
}
to goodboyws(深夜不眠者) :
你的这个方法,有一个不足之处:我把鼠标放在边框上,拉到窗体大小时,放掉鼠标,
窗体右上角的图标,菜单,都没有了。而且我自画的那些图标的最小化,最大化消息都
不能使用了的。
是不是这句话,还原系统菜单的功能:SetWindowLong(hWnd, GWL_STYLE, dwStyle | WS_SYSMEN);没有起作呢?谢谢。
我自己使用:SendMessage(hwnd,WM_SYSCOMMAND,0xF012,0); 这个语句后,却得到是只能按下鼠标移动窗体,却不能改变窗体大小。不知为何。
望继...
现下没时间作实验了,我觉得还是应该在wParam上作文章。只不过要多判断一些东西,比如HTSYSMENU、HTBORDER等等
to: pomelowu(羽战士) ,能讲的详细点吗?
谢谢楼上两位热情帮助的呢.能加你们的MSN或QQ吗?谢谢.
case WM_NCLBUTTONDOWN:
if (wParam == HTCAPTION)
{
DefWindowProc(hwnd, message, wParam, lParam);
}
if (wParam == HTLEFT) // HTTOP, HTBOTTOM, ....
{
DefWindowProc(hwnd, message, wParam, lParam);
}
return FALSE;case WM_NCHITTEST:
if (DefWindowProc(hwnd, message, wParam, lParam) == HTCAPTION)
{
SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam);
DrawTitleMax(hwnd,hInstance,point,message);
return FALSE;
}
return TRUE;
我用这句话,窗体是可以移动了,就是不能够调整大小。
to:pomelowu(羽战士) 兄,这样晚还要你回我,真的是辛苦了。。再次谢谢了。不过你方法还是不行喔。
望再次倾听。谢谢
case WM_NCLBUTTONDOWN:
{
Title_Down_Up=true;
point_Down.x=LOWORD (lParam) ;
point_Down.y=HIWORD (lParam) ;
long lRet = DefWindowProc (hwnd, message, wParam, lParam) ;
DrawTitleMax(hwnd,hInstance,point,message);
return lRet;
}
switch(wParam)
{
case HTCAPTION:
case HTLEFT:
case HTTOP:
//HTBOTTOM, ....
DefWindowProc(hwnd, message, wParam, lParam);
} Title_Down_Up=true;
point_Down.x=LOWORD (lParam) ;
point_Down.y=HIWORD (lParam) ;
DrawTitleMax(hwnd,hInstance,point,message);
return FALSE;多了一个WM_NCHITTEST的处理反而有问题。:)
WM_SETCURSOR
WM_NCLBUTTONDOWN
WM_NCLBUTTONDBLCLKWM_INITMENU
WM_NCHITTEST返回位置在三个按钮上
处理还是不完善。我已经准备学习WINAMP的边框调整风格。它是一个不能调整大小。另一个放歌列表是右下角放一个拖动的按钮。这样就可以调整大小。只要计算鼠标MOVE点与最左上角的那个位置差就可以。
对于这种自画外观的SDK窗口,不知是否可行?望告知。谢谢。