1.我在使用Static的时候发现,如果选择图片居中,并且图片的大小比Static小的话
图片到Static边缘的空白部分就会被填上随机的颜色(图片中的象素),使图片看起来很难看,。
有谁解决了这个问题?代码如下,用了WM_CTLCOLORSTATIC也不行。
case WM_COMMAND:
if (LOWORD(wParam) == ID_SETSTATIC) 
{
         HBITMAP hello;
hello=SHLoadDIBitmap(TEXT("C:\\test.bmp"));
         //将图片句柄发给Static
         SendMessage(GetDlgItemhDlg,IDC_STATICBMP),
         STM_SETIMAGE,IMAGE_BITMAP,   (long)hello);
      return TRUE;
}
break;case WM_CTLCOLORSTATIC:
    SetBkMode(GetDC(GetDlgItem(hDlg,IDC_STATICBMP)),TRANSPARENT);
    return (long)GetStockObject(BLACK_BRUSH);
    break;2.如何控制Static的可见和不可见
    我想在菜单中中设一个菜单项,按一下设置Static为可见,再按一次设为不可见
应该怎么写,用了SetWindowlong,但是没起作用,应该怎么写?我用SDK,所以只能用API

解决方案 »

  1.   

    ::SendMessage(**
    或者
    ::ShowWindow
      

  2.   

    1取得相片大小,然后MoveWindow2
    if(bShow)
    {
    GetDlgItem(IDC_STATICBMP)->ShowWindow(SW_SHOW);
    bShow=!bShow;
    }
    else
    {
    GetDlgItem(IDC_STATICBMP)->ShowWindow(SW_SHOW);
    bShow=!bShow;
    }
      

  3.   

    1:
    case WM_COMMAND:
    if (LOWORD(wParam) == ID_SETSTATIC) 
    {
           HBITMAP hello;
           hello=SHLoadDIBitmap(TEXT("C:\\test.bmp"));
           HWND hStatic=GetDlgItemh(Dlg,IDC_STATICBMP);
           BITMAP bmp;
           GetObject(hello,sizeof(BITMAP),&bmp);
           SetWindowPos(hStatic,0,0,bmp.bmWidth,bmp.bmHeight,SWP_NOMOVE|SWP_NOZORDER);
           SendMessage(hStatic,STM_SETIMAGE,IMAGE_BITMAP,(long)hello);
           return TRUE;
    }
    2:
     用ShowWindow(SW_HIDE)和ShowWindow(SW_SHOWNORMAL)来显示和隐藏。
      

  4.   

    感谢几位的回答,第二个问题好像可以行得通,有一点不明白,就是使用了
    ShowWindow(hStatic,SW_HIDE)之后,再将当前对话框关闭,窗口是否也被释放了?但是第一个问题还是没解决,我想选择的是图片居中,但是要放在Static中间,不是让Static跟随图片的大小。因为Static有一个边框,这样显示的问题就是图片到Static边框的之间自动被填上了颜色。真搞不懂Microsoft怎么写的
      

  5.   

    为什么不能让改变static的大小去适应图片的大小呢?
        照你说的来看,随机填上的颜色是属于前景的,你在WM_CTLCOLORSTATIC中返回一个brush那也只能改变背景刷,没什么作用。 也许用一个owner-draw的static可以解决这个问题。   ShowWindow(hStatic,SW_HIDE)之后,再将当前对话框关闭,窗口是否也被释放了?是的。
      

  6.   

    你说得对,只是用owner-draw 涉及到不断刷新的问题,我有很多个Static要显示就太慢了。看来只能写算法让Static自动在屏幕中居中,并且图片和Static一样大了。