将位图设置为 CStatic 对象
Set bitmap into CStatic object
我正在尝试将一张位图添加到图片框中。这是我试过的:
void DlgError::Define_Image()
{
// I generate all requiered elements.
CBitmap bitmap;
// Depending on the type of the message, I define the image to show.
switch (Message_Type)
{
case Error: bitmap.LoadBitmap(IDB_ERROR); break;
case Warning: break;
case Information:
default: bitmap.LoadBitmap(IDB_INFORMATION); break;
}
// I set the new picture.
m_picture.ModifyStyle(0, SS_BITMAP);
m_picture.SetBitmap(bitmap);
}
我不知道为什么它不起作用。我在某些论坛中有相同的代码。有谁能够帮助我?我必须定义一些额外的样式?
图片框的类型为Bitmap
(可以挂在图片控件属性中)
解决方案
我必须说解决方案是两个答案的组合。最后,我定义了一个局部变量,然后使用下一段代码来执行我想要的操作。
void DlgError::Define_Image()
{
// Depending on the type of the message, I define the image to show.
switch (Message_Type)
{
case Error: bitmap.LoadBitmap(IDB_ERROR); break;
case Warning: break;
case Information:
default: bitmap.LoadBitmap(IDB_INFORMATION); break;
}
// I set the new picture.
m_picture.ModifyStyle(SS_ENHMETAFILE, SS_BITMAP);
m_picture.SetBitmap(bitmap);
}
感谢所有帮助过我的人!
你确定LoadBitmap成功了吗?
m_picture 是否已经创建了匹配的样式,否则您的代码可能会失败。
SS_BITMAP 是一个数字。如果要改变静态控件的tsyle,需要去掉旧的样式:
m_picture.ModifyStyle(SS_TYPEMASK,SS_BITMAP);
否则会产生副作用。
用 Spy++ 检查样式。
您正在使用 CBitmap
对象作为 Define_Image
函数中的局部变量。
一旦函数超出范围,位图就会被 CBitmap
对象的析构函数销毁(这里没有引用计数)。
您需要分离对象,然后将 HBITMAP
句柄传递给 CStatic
的 SetBitmap
。
幸运的是,只需要一行:
m_picture.SetBitmap((HBITMAP)bitmap.Detach());
我正在尝试将一张位图添加到图片框中。这是我试过的:
void DlgError::Define_Image()
{
// I generate all requiered elements.
CBitmap bitmap;
// Depending on the type of the message, I define the image to show.
switch (Message_Type)
{
case Error: bitmap.LoadBitmap(IDB_ERROR); break;
case Warning: break;
case Information:
default: bitmap.LoadBitmap(IDB_INFORMATION); break;
}
// I set the new picture.
m_picture.ModifyStyle(0, SS_BITMAP);
m_picture.SetBitmap(bitmap);
}
我不知道为什么它不起作用。我在某些论坛中有相同的代码。有谁能够帮助我?我必须定义一些额外的样式?
图片框的类型为Bitmap
(可以挂在图片控件属性中)
解决方案
我必须说解决方案是两个答案的组合。最后,我定义了一个局部变量,然后使用下一段代码来执行我想要的操作。
void DlgError::Define_Image()
{
// Depending on the type of the message, I define the image to show.
switch (Message_Type)
{
case Error: bitmap.LoadBitmap(IDB_ERROR); break;
case Warning: break;
case Information:
default: bitmap.LoadBitmap(IDB_INFORMATION); break;
}
// I set the new picture.
m_picture.ModifyStyle(SS_ENHMETAFILE, SS_BITMAP);
m_picture.SetBitmap(bitmap);
}
感谢所有帮助过我的人!
你确定LoadBitmap成功了吗?
m_picture 是否已经创建了匹配的样式,否则您的代码可能会失败。
SS_BITMAP 是一个数字。如果要改变静态控件的tsyle,需要去掉旧的样式:
m_picture.ModifyStyle(SS_TYPEMASK,SS_BITMAP);
否则会产生副作用。 用 Spy++ 检查样式。
您正在使用 CBitmap
对象作为 Define_Image
函数中的局部变量。
一旦函数超出范围,位图就会被 CBitmap
对象的析构函数销毁(这里没有引用计数)。
您需要分离对象,然后将 HBITMAP
句柄传递给 CStatic
的 SetBitmap
。
幸运的是,只需要一行:
m_picture.SetBitmap((HBITMAP)bitmap.Detach());