使用GDI API在WinCE中加载的位图上绘制线条

问题描述:

海,
我的要求是在加载到内存中的位图上画一条线.我在WinCE中工作.我写的代码是这样的,
HGDIOBJ hPrevObj = 0;
HGDIOBJ hPrevObj1 = 0;
BOOL bStat = 0;
dwError = :: GetLastError();
hDCMem = :: CreateCompatibleDC(g_dc);
dwError = :: GetLastError();
SelectObject(hDCMem,g_hBitmap);

dwError = 0;
dwError = :: GetLastError();
SelectObject(hDCMem,g_hPen);
dwError = 0;
dwError = :: GetLastError();
bStat = MoveToEx(hDCMem,g_X,g_Y,0);
dwError = :: GetLastError();
bStat = 0;
g_X + = 10;
g_Y + = 10;
bStat = LineTo(hDCMem,g_X,g_Y);
dwError = 0;
dwError = :: GetLastError();
bStat = 0;
//bStat = BitBlt(hDC,0,0,240,82,hDCMem,0,0,SRCCOPY);
bStat = StretchBlt(g_dc,0,0,240,82,hDCMem,0,0,240,82,SRCCOPY);
dwError = :: GetLastError();

我面临的问题是,线条绘制函数和BitBlt()函数返回成功,但未在窗口或加载的位图上反映出来.

Hai,
my requirement is to draw a line over a bitmap loaded into memory. i am working in WinCE. The code i wrote is like this,
HGDIOBJ hPrevObj = 0;
HGDIOBJ hPrevObj1 = 0;
BOOL bStat = 0;
dwError = ::GetLastError();
hDCMem = ::CreateCompatibleDC( g_dc );
dwError = ::GetLastError();
SelectObject( hDCMem, g_hBitmap );

dwError = 0;
dwError = ::GetLastError();
SelectObject( hDCMem, g_hPen );
dwError = 0;
dwError = ::GetLastError();
bStat = MoveToEx( hDCMem, g_X, g_Y, 0 );
dwError = ::GetLastError();
bStat = 0;
g_X+= 10;
g_Y += 10;
bStat = LineTo( hDCMem, g_X, g_Y );
dwError = 0;
dwError = ::GetLastError();
bStat = 0;
//bStat = BitBlt( hDC, 0, 0, 240, 82, hDCMem, 0, 0, SRCCOPY );
bStat = StretchBlt( g_dc, 0, 0, 240, 82, hDCMem, 0, 0, 240, 82, SRCCOPY );
dwError = ::GetLastError();

The problem i am facing is that the line drawing function and BitBlt() function returns success but it is not getting reflected on the window or the loaded bit map.

它不是反射"的,因为您不做任何事情来渲染窗口中的图形.您需要渲染以响应WM_PAINT Windows消息.即使您这样做,所做的更改也可能不会更新视图,因为没有任何东西触发发送此消息.在这种情况下,您还应该调用失效函数之一.

请参阅:
http://msdn.microsoft.com/en-us/library/dd145213%28v = vs.85%29.aspx [ ^ ].

这是在WM_PAINT:
上使用渲染的最小代码示例 http://msdn.microsoft.com/en-us/library/dd162487%28v = vs.85%29.aspx [ ^ ].

无效:
http://msdn.microsoft.com/en-us/library/dd145002%28v = vs.85%29.aspx [ ^ ],
http://msdn.microsoft.com/en-us/library/dd145003%28v = vs.85%29.aspx [ ^ ].

另请参见概述:
http://msdn.microsoft.com/en-us/library/dd162759%28v = vs.85%29.aspx [ ^ ].

—SA
It is not "reflecting" because you don''t do anything to render the graphics in the window. You need to render in response to WM_PAINT Windows message. Even if you do, your changes might not update the view, because nothing triggers sending this message. In this case, you also should call one of the invalidation functions.

Please see:
http://msdn.microsoft.com/en-us/library/dd145213%28v=vs.85%29.aspx[^].

This is a minimal code sample for using rendering on WM_PAINT:
http://msdn.microsoft.com/en-us/library/dd162487%28v=vs.85%29.aspx[^].

Invalidation:
http://msdn.microsoft.com/en-us/library/dd145002%28v=vs.85%29.aspx[^],
http://msdn.microsoft.com/en-us/library/dd145003%28v=vs.85%29.aspx[^].

See also the overview:
http://msdn.microsoft.com/en-us/library/dd162759%28v=vs.85%29.aspx[^].

—SA