win32 问题
大家好, 我在编写一个例子程序的时候,发现了这么一个问题,就是我窗口上在程序运行的过程中,有打印的文字和矩形, 但是如果我切换当前窗口,意思是另一个已经运行的任何程序的窗口覆盖了当前的窗口,然后再切换回来,原来在窗口上的文字和图像都变成了空白,请问这是怎么回事情啊?
以下是一些代码:
wcex.style = CS_VREDRAW | CS_HREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MLTITHRD));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MLTITHRD);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_MLTITHRD));
××××××××××××××××××××××××××××××××××××××××××××××××××
hWnd = CreateWindow(szWindowClass,
szTitle,
WS_OVERLAPPED | WS_SYSMENU,
0, 0,400,250,
NULL,
NULL,
hInstance,
NULL);
××××××××××××××××××××××××××××××××××××××
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
×××××××××××××××××××××××××××××××××××××××
void ThreadProc(DWORD *ThreadArg)
{
RECT rect;
HDC hDC;
HANDLE hBrush, hOldBrush;
DWORD dwThreadHits = 0;
char cBuf[80];
int iThreadNo, i;
GetClientRect (_hWnd, &rect);
hDC = GetDC (_hWnd);
hBrush = CreateSolidBrush(RGB(*(ThreadArg), *(ThreadArg), *(ThreadArg)));
hOldBrush = SelectObject(hDC, hBrush);
switch (*ThreadArg) {
case HIGHEST_THREAD : iThreadNo = 0; break;
case ABOVE_AVE_THREAD : iThreadNo = 1; break;
case NORMAL_THREAD : iThreadNo = 2; break;
case BELOW_AVE_THREAD : iThreadNo = 3; break;
case LOWEST_THREAD : iThreadNo = 4; break;
}
wsprintf((LPWSTR)cBuf, _T("T%d"), iThreadNo);
TextOut(hDC, *(ThreadArg), rect.bottom-150, (LPWSTR)cBuf, lstrlen((LPWSTR)cBuf));
wsprintf((LPWSTR)cBuf, _T("P=%d"), GetThreadPriority(_hThread[iThreadNo]));
TextOut(hDC, *(ThreadArg), rect.bottom-130, (LPWSTR)cBuf, lstrlen((LPWSTR)cBuf));
do
{
dwThreadHits++;
Rectangle(hDC, *(ThreadArg), rect.bottom-(dwThreadHits/10),
*(ThreadArg)+0x40, rect.bottom);
if (_uDelayType == SLEEPDELAY)
Sleep(10);
else if (_uDelayType == FORLOOPDELAY)
for (i=0; i<30000; i++);
else // _uDelayType == NODELAY)
{
}
} while (dwThreadHits < 1000);
hBrush = SelectObject(hDC, hOldBrush);
DeleteObject (hBrush);
ReleaseDC (_hWnd, hDC);
}
以下是一些代码:
wcex.style = CS_VREDRAW | CS_HREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MLTITHRD));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MLTITHRD);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_MLTITHRD));
××××××××××××××××××××××××××××××××××××××××××××××××××
hWnd = CreateWindow(szWindowClass,
szTitle,
WS_OVERLAPPED | WS_SYSMENU,
0, 0,400,250,
NULL,
NULL,
hInstance,
NULL);
××××××××××××××××××××××××××××××××××××××
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
×××××××××××××××××××××××××××××××××××××××
void ThreadProc(DWORD *ThreadArg)
{
RECT rect;
HDC hDC;
HANDLE hBrush, hOldBrush;
DWORD dwThreadHits = 0;
char cBuf[80];
int iThreadNo, i;
GetClientRect (_hWnd, &rect);
hDC = GetDC (_hWnd);
hBrush = CreateSolidBrush(RGB(*(ThreadArg), *(ThreadArg), *(ThreadArg)));
hOldBrush = SelectObject(hDC, hBrush);
switch (*ThreadArg) {
case HIGHEST_THREAD : iThreadNo = 0; break;
case ABOVE_AVE_THREAD : iThreadNo = 1; break;
case NORMAL_THREAD : iThreadNo = 2; break;
case BELOW_AVE_THREAD : iThreadNo = 3; break;
case LOWEST_THREAD : iThreadNo = 4; break;
}
wsprintf((LPWSTR)cBuf, _T("T%d"), iThreadNo);
TextOut(hDC, *(ThreadArg), rect.bottom-150, (LPWSTR)cBuf, lstrlen((LPWSTR)cBuf));
wsprintf((LPWSTR)cBuf, _T("P=%d"), GetThreadPriority(_hThread[iThreadNo]));
TextOut(hDC, *(ThreadArg), rect.bottom-130, (LPWSTR)cBuf, lstrlen((LPWSTR)cBuf));
do
{
dwThreadHits++;
Rectangle(hDC, *(ThreadArg), rect.bottom-(dwThreadHits/10),
*(ThreadArg)+0x40, rect.bottom);
if (_uDelayType == SLEEPDELAY)
Sleep(10);
else if (_uDelayType == FORLOOPDELAY)
for (i=0; i<30000; i++);
else // _uDelayType == NODELAY)
{
}
} while (dwThreadHits < 1000);
hBrush = SelectObject(hDC, hOldBrush);
DeleteObject (hBrush);
ReleaseDC (_hWnd, hDC);
}
...全文
相关推荐
win32 读者写者问题
win32 读者写者问题 win内核编程 fifo
哲学家进餐问题 win32实现
平台:vc++6.0 win32 API 图形界面演示哲学家进餐问题
解决python中导入win32com.client出错的问题
准备写一个操作Excel脚本却在导入包的时候出现了一个小问题 导入包 from Tkinter import Tk from time import sleep, ctime from tkMessageBox import showwarning from urllib import urlopen import win32com.client as win32 报错提示 Traceback (most recent call last): File estock.pyw, line 7, in import win32com.client as win32 I
生产者-消费者问题的Win32实现
操作系统课程实验,用win32实现生产者消费者问题
全面解决Generic host process for win32 services遇到问题需要关闭
全面解决Generic host process for win32 services遇到问题需要关闭


