1。
我重画了一个标题栏,用贴图的,但是不知道怎么计算出标题栏按钮的起始位置
GetSystemMetrics() 函数只能获得按钮的尺寸,不能获得起始位置,
我不想去掉按钮在自己实现
希望有谁能够告诉我一下,如何计算出按钮的精确起始位置。2。
当按钮移动到按钮上时,按钮图片要切换,但是如果通过WM_NCMOUSEMOVE消息来实现,就会有这样一个问题
OnMouseMove()
{
  //获取鼠标位置 Point pt;
  //按钮区域 RECT rc;
  if(PtInRect(pt,rc))
  {
    //画图片1
  }
  else
  {
    //画图片2
  }}
不管有没有移动到按钮上,每次移动鼠标都在不断地重画。做其他普通按钮的时候也一样。
3。
图片背景和文字。使用TextOut或者 DrawText 可以把文字绘到位图上,但是却无法获得窗口的文本。
我看到有些软件,比如QQ,按钮上有背景图片,图片上又有文字,但是我可以用GetWindowText来获得这个文字。
这样竟然不会相互覆盖,不知道怎么做的,请高手指点一二

解决方案 »

  1.   

    2.需要做一个状态的保存,保存现在的状态,只有在状态切换的时候才画
    OnMouseMove()
    {
      static bool bover=false;
      //获取鼠标位置 Point pt;
      //按钮区域 RECT rc;
      if(PtInRect(pt,rc) && !bover)
      {
        //画图片1
        bover=true;
      }
      if(!PtInRect(pt,rc) && bover)
      {
        //画图片2
      }}
      

  2.   

    3.ownerdraw,然后自己画,同时可以设置setwindowtext
      

  3.   

    GetSystemMetrics SM_CXSIZE, SM_CYSIZE 可以取得按钮大小。然后用Window的Rect减去一个宽度即为Close的位置,其余的你自己算吧。
      

  4.   

    3楼的办法我也试过,问题在于按钮和边框之间还有一点距离,无法得知这段距离的值dirdirdir3 的方法似乎可行