我在写了一个窗口绘画的程序,是类似DirectDraw的类,运行结果吓了我一跳,
一开始运行正常,但过了一会儿后绘画的位置突然到了屏幕的左上面,就好像这个类的hwnd变量为NULL一样,hwnd是初始化这个类的对象时设置的为窗口的句柄,是不是窗口的句柄会变啊,或是我用GetDC()后没有ReleaseDC().
请问这是为什么???
一开始运行正常,但过了一会儿后绘画的位置突然到了屏幕的左上面,就好像这个类的hwnd变量为NULL一样,hwnd是初始化这个类的对象时设置的为窗口的句柄,是不是窗口的句柄会变啊,或是我用GetDC()后没有ReleaseDC().
请问这是为什么???
解决方案 »
- 如何直接激活FORMVIEW
- EVC消除模式对话框阴影
- 传输文件
- 生成AcitveX插件,调试中遇到的问题
- 如何用代码删除 IE 的cookis, 已浏览的文件,以及浏览历史(history);
- 请教高手:WINDOWS的线程问题?
- help,我的电脑中了毒,杀掉后,在windows中除了ie外,点击所有其他的可执行程序,都说该执行文件未找到,请问怎么解决
- 怎样在mainfrm中放上一个listctl?!!!
- 如何通过程序知道ADO是否已经安装?(VC6)
- 替换.txt文件中指定的字符串?
- 帮帮忙吧 工具栏显示图标的问题
- 如何用SendMessage或PostMessage发另一个窗口发送alt+回车
int CDisplay::Create(HWND hPwnd, int wi, int he)
{
m_main_hwnd = hPwnd;
m_wnd_width = wi;
m_wnd_height = he; int i_screen_w = GetSystemMetrics(SM_CXSCREEN);
int i_screen_h = GetSystemMetrics(SM_CYSCREEN); SetWindowPos(m_main_hwnd, NULL, (i_screen_w - m_wnd_width) / 2, (i_screen_h - m_wnd_height) / 2 - 13, m_wnd_width, m_wnd_height, 0); HDC hdc = ::GetDC(m_main_hwnd); m_memory_dc = CreateCompatibleDC(hdc); m_memory_bitmap = CreateCompatibleBitmap(hdc, m_wnd_width, m_wnd_height); m_surface_back = new CSurface();
m_surface_back->Create(wi, he);
m_surface_back->DrawRect(0, 0, wi, he, RGB(0, 0, 0)); SelectObject(m_memory_dc, m_memory_bitmap); ReleaseDC(m_main_hwnd, hdc); return 1;
}int CDisplay::Present()
{
HDC hdc = ::GetDC(m_main_hwnd); BitBlt(hdc, 0, 0, m_wnd_width, m_wnd_height, m_memory_dc, 0, 0, SRCCOPY); ReleaseDC(m_main_hwnd, hdc); return 1;
}HDC CDisplay::GetDC()
{
if(m_main_hwnd == NULL)
return NULL;
return ::GetDC(m_main_hwnd);
}int CGameApp::Create(HWND hwnd)
{
m_display = new CDisplay();
m_display->Create(hwnd, SCREEN_WIDTH, SCREEN_HEIGHT);
...
}int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
...
if(!g_app.Create(g_hWnd))
return 0;
}