在优化校准中绘制图像

时间:2011-11-22 06:26:28

标签: c++ windows winapi

我有一个名为IDC_PICTURECONTROL的图片控件和一个名为LPPICTURE的{​​{1}}。

当我的窗口收到lpPicutre时,我会像这样调用我的函数WM_PAINT

drawPicture(HWND, LPPICTURE)

现在它的编写方式,控件周围的黑色边框消失了,图片根本没有画出来。

如果我编辑该函数使其不是绘制到图片控件,而是绘制对话框本身(drawPicture(GetDlgItem(hDlg, IDC_PICTURECONTROL), lpPicture); ),那么它就会在窗口的客户区域的背景上正确绘制。 (不是我想要的)。

以下是绘画功能中的代码:

hDlg

void drawPicture(HWND hWnd, LPPICTURE picture) { PAINTSTRUCT ps; HDC hdc; hdc = BeginPaint(hWnd, &ps); //hdc = BeginPaint(hDlg, &ps); (works, but draws on window instead of control) if (picture) { long hmWidth; long hmHeight; picture->get_Width(&hmWidth); picture->get_Height(&hmHeight); int nWidth = MulDiv(hmWidth, GetDeviceCaps(hdc, LOGPIXELSX), HIMETRIC_INCH); int nHeight = MulDiv(hmHeight, GetDeviceCaps(hdc, LOGPIXELSY), HIMETRIC_INCH); RECT rc; GetClientRect(hWnd, &rc); // I have tried GetWindowRect() also int w = 0, h = 0, x = 0, y = 0; if (hmWidth == hmHeight) { // square w = (rc.right - rc.left); h = (rc.bottom - rc.top); x = rc.left; y = rc.top; } else if (hmWidth > hmHeight) { // wide w = (rc.right - rc.left); h = (w * hmHeight) / hmWidth; x = rc.left; y = (rc.bottom - rc.top - h) / 2; } else { //tall h = (rc.bottom - rc.top); w = (h * hmWidth) / hmHeight; y = rc.top; x = (rc.right - rc.left - w) / 2; } picture->Render(hdc, x, y, w, h, 0, hmHeight, hmWidth, -hmHeight, &rc); } EndPaint(hWnd, &ps); //EndPaint(hDlg, &ps); } 是图片控件的处理程序,hWnd是对话框的处理程序。

我想也许它正在被窗户拉出来,所以我将x和y设置为0,宽度和高度设置为1000,但这并没有改变任何东西。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果此代码与hDlg一起使用,则可以,问题可能出在静态控件本身。确保它具有SS_BITMAP样式。在Visual Studio资源编辑器中,它被称为Type,默认情况下设置为SS_BLACKFRAME(Frame)。

答案 1 :(得分:0)

此代码适用于CStatic。

CPictureView* image = new CPictureView(std::string("E:\\My Documents\\..jpeg"));
image->Create("", SS_BLACKRECT | SS_OWNERDRAW | WS_CHILD | WS_VISIBLE, CRect(100, 100, 300, 300), this, IDC_STATIC1);