我现在想写个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) ;就会出现按最小化,或最大化或最关闭按钮时。窗体的原来的那个灰色的窗体最小化,最大化或关闭按钮就出来了的呢。那不等于没有画吗?
能告诉我怎么解决吗?谢谢。

解决方案 »

  1.   

    索性把窗体设为没有title的,然后按钮自己画、消息自己处理
      

  2.   

    楼上,设为没有TITLE还是一样的,需要处理的消息是哪些呢?移动窗体怎么办呢?
    二是窗体大小改变比如上下左右,右上,右下,左上,左下;等消息是哪些呢?
    楼上继续呀。
      

  3.   

    to :pomelowu(羽战士) ://return 0;//DefWindowProc (hwnd, message, wParam, lParam) ;
    我屏蔽掉这句话,用你说的
    return HTCAPTION;
    还是不起作用喔?
    能具体点吗?谢谢
      

  4.   

    case WM_NCLBUTTONDOWN:
    if (wParam == HTCAPTION)
    {
    DefWindowProc (hwnd, message, wParam, lParam) ;
    // your drawing here
    }
    return FALSE;
      

  5.   

    case WM_NCLBUTTONDOWN:
    {
    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;
    }
      

  6.   

    谢谢楼上两位;
    to goodboyws(深夜不眠者) :
    你的这个方法,有一个不足之处:我把鼠标放在边框上,拉到窗体大小时,放掉鼠标,
    窗体右上角的图标,菜单,都没有了。而且我自画的那些图标的最小化,最大化消息都
    不能使用了的。
    是不是这句话,还原系统菜单的功能:SetWindowLong(hWnd, GWL_STYLE, dwStyle | WS_SYSMEN);没有起作呢?谢谢。
    我自己使用:SendMessage(hwnd,WM_SYSCOMMAND,0xF012,0); 这个语句后,却得到是只能按下鼠标移动窗体,却不能改变窗体大小。不知为何。
    望继...
      

  7.   

    SPY++看不到喔.怎么看呢?只能看到整个窗口呀.
      

  8.   

    goodboyws 用SetWindowLong将标题栏去掉,执行DefWindowProc 之后在添加上。
    现下没时间作实验了,我觉得还是应该在wParam上作文章。只不过要多判断一些东西,比如HTSYSMENU、HTBORDER等等
      

  9.   

    to:goodboyws(深夜不眠者) 我创建的时候已经有WS_SYSMENU这个风格.
    to: pomelowu(羽战士) ,能讲的详细点吗?
    谢谢楼上两位热情帮助的呢.能加你们的MSN或QQ吗?谢谢.
      

  10.   

    再试试看:
    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;
      

  11.   

    SendMessage(hwnd,WM_SYSCOMMAND,0xF012,0);
    我用这句话,窗体是可以移动了,就是不能够调整大小。
    to:pomelowu(羽战士) 兄,这样晚还要你回我,真的是辛苦了。。再次谢谢了。不过你方法还是不行喔。
    望再次倾听。谢谢
      

  12.   

    或许这么干可以
    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;
    }
      

  13.   

    case WM_NCLBUTTONDOWN:
    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的处理反而有问题。:)
      

  14.   

    我所知道的对标题栏进行了绘制的消息
     WM_SETCURSOR
    WM_NCLBUTTONDOWN 
    WM_NCLBUTTONDBLCLKWM_INITMENU
    WM_NCHITTEST返回位置在三个按钮上
      

  15.   

    呵呵,楼上的两位真的是太好了。望能告诉我QQ或MSN,以后可能还有众多问题,望能赐教。
    处理还是不完善。我已经准备学习WINAMP的边框调整风格。它是一个不能调整大小。另一个放歌列表是右下角放一个拖动的按钮。这样就可以调整大小。只要计算鼠标MOVE点与最左上角的那个位置差就可以。
    对于这种自画外观的SDK窗口,不知是否可行?望告知。谢谢。
      

  16.   

    可以的。楼主研究一下goodboyws(深夜不眠者)提到的那些消息,外加WM_NCPAINT吧。:)