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
图片到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
或者
::ShowWindow
if(bShow)
{
GetDlgItem(IDC_STATICBMP)->ShowWindow(SW_SHOW);
bShow=!bShow;
}
else
{
GetDlgItem(IDC_STATICBMP)->ShowWindow(SW_SHOW);
bShow=!bShow;
}
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)来显示和隐藏。
ShowWindow(hStatic,SW_HIDE)之后,再将当前对话框关闭,窗口是否也被释放了?但是第一个问题还是没解决,我想选择的是图片居中,但是要放在Static中间,不是让Static跟随图片的大小。因为Static有一个边框,这样显示的问题就是图片到Static边框的之间自动被填上了颜色。真搞不懂Microsoft怎么写的
照你说的来看,随机填上的颜色是属于前景的,你在WM_CTLCOLORSTATIC中返回一个brush那也只能改变背景刷,没什么作用。 也许用一个owner-draw的static可以解决这个问题。 ShowWindow(hStatic,SW_HIDE)之后,再将当前对话框关闭,窗口是否也被释放了?是的。