ALTE DOCUMENTE
|
||||||||
WM_PAINT
Прежде чем как продолжит 111m1215b ;ь чтение, снова запустите программу, приведенную в предыдущем разделе, и введите несколько символов. Затем минимизируйте и снова распахните окно. Вы увидите, что в восстановленном окне ничего не отображается. И в том случае, если окно перекрывается другим окном, а затем вновь становится активным, последний введенный символ не отображается. Причина этого проста: Windows, как правило, не запоминает содержимое окна (число окон зависит от приложений). Таким образом, все заботы по перерисовке содержимого окна возлагаются на Вашу программу.
Для того чтобы программа знала, когда ей следует это делать, Windows каждый раз, когда необходимо перерисовать окно, посылает ей сообщение WM_PAINT case WM_PAINT
WM_PAINT, будет полезно рассказать, почему Windows не перерисовывает окно автоматически. В большинстве случаев перерисовать окно проще программе, нежели Windows, поскольку именно программа, а не Windows, должна «знать» о содержимом окна и способах его перерисовки. И хотя достоинства этого подхода являются спорными, в данном случае нужно просто принять его, поскольку не похоже, что он будет меняться.
WM_PAINT case switch
запроса на перерисовку окна
case WM_PAINT:
hdc=BeginPaint(hwnd,&paintstruct); // DC
TextOut(hdc,1,1,str,strlen(str)); //
EndPaint(hwnd, &paintstruct); // DC
break;
BeginPaint() GetDC() WM_PAINT BeginPaint()
HDC BeginPaint(HWND hwnd, LPPAINTSTRICT lpPS);
PAINTSTRUCT
typedef struct tagPAINTSTRUCT
PAINTSTRUCT;
RECT
typedef struct tagRECT
RECT;
PAINTSTRUCT rcPaint PAINTSTRUCT; можно предположит 111m1215b ;ь, что рабочая область окна будет перерисовываться целиком.
WM_PAINT:
WM_PAINT
#include <Windows.h>
#include <String.h>
#include <Stdio.h>
LRESULT CALLBACK WindowFunc(HWND, UINT,
WPARAM, LPARAM) ;
char szWinName[]=" "; //
char str[80]="Пример"; // Буфер для строки вывода
int WINAPI WinMain(HINSTANCE hThisInst,
HINSTANCE hPrevInst,
LPSTR lpszArgs,
int nWinMode)
return msg.wParam;
}
// системой Windows и получает в качестве
LRESULT CALLBACK WindowFunc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
return 0;
}
Прежде чем продолжит 111m1215b ;ь чтение, скомпилируйте и повторно запустите эту программу. Попробуйте ввести несколько символов, затем минимизируйте и снова раскройте окно. Вы увидите, что каждый раз при перерисовке окна последний введенный символ также перерисовывается. Заметьте, что внешний массив str инициализируется как слово "Пример", и эта строка отображается в начале работы программы. Так происходит потому, что при создании окна оно получает сообщение WM PAINT
WM PAINT
Windows
|