У меня есть вопрос о глобальных переменных и очистке объектов в c ++.
Например, посмотрите на код здесь;
case WM_PAINT:
paintText(&hWnd);
break;
void paintText(HWND* hWnd) {
PAINTSTRUCT ps;
HBRUSH hbruzh = CreateSolidBrush(RGB(0,0,0));
HDC hdz = BeginPaint(*hWnd,&ps);
char s1[] = "Name";
char s2[] = "IP";
SelectBrush(hdz,hbruzh);
SelectFont(hdz,hFont);
SetBkMode(hdz,TRANSPARENT);
TextOut(hdz,3,23,s1,sizeof(s1));
TextOut(hdz,10,53,s2,sizeof(s2));
EndPaint(*hWnd,&ps);
DeleteObject(hdz);
DeleteObject(hbruzh); // bad?
DeleteObject(ps); // bad?
}
1) Прежде всего;какие объекты удаляются, а какие нет, и почему?Не уверен на 100% в этом.
2) Поскольку WM_PAINT вызывается каждый раз, когда окно перерисовывается, было бы лучше просто хранить ps, hdz и hbruzh в качестве глобальных переменных, а не заново инициализировать их каждый раз?Недостатком, я думаю, были бы тонны глобальных переменных в конце> _>, но с точки зрения производительности это не было бы менее потребляющим процессор?Я знаю, что это не будет иметь большого значения, но я просто стремлюсь к минимализму в образовательных целях.
3) Как насчет библиотек, которые загружены?Например:
//
// Main
//
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {
// initialize vars
HWND hWnd;
WNDCLASSEX wc;
HINSTANCE hlib = LoadLibrary("Riched20.dll");
ThishInstance = hInstance;
ZeroMemory(&wc,sizeof(wc));
// set WNDCLASSEX props
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WindowProc;
wc.hInstance = ThishInstance;
wc.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_MYICON));
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = TEXT("PimpClient");
RegisterClassEx(&wc);
// create main window and display it
hWnd = CreateWindowEx(NULL,
wc.lpszClassName,
TEXT("PimpClient"),
0,
300,
200,
450,
395,
NULL,
NULL,
hInstance,
NULL);
createWindows(&hWnd);
ShowWindow(hWnd,nCmdShow);
// loop message queue
MSG msg;
while (GetMessage(&msg, NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// cleanup?
FreeLibrary(hlib);
return msg.wParam;
}
3cont) есть ли причина для FreeLibrary в конце?Я имею в виду, когда процесс завершается, все ресурсы освобождаются в любом случае?И поскольку библиотека используется для рисования текста во всей программе, зачем мне до этого бесплатно?
Приветствия