Орган управления "STATIC"
Интересует такой вопрос: "по каким причинам может не отображаться элемент управления "static"?" Дело в том, что я стандартно создаю этот элемент, но он не прорисовывается в окне, "edit" нормально отображается, а этот не хочет.
#include<windows.h>
#include<tchar.h>
BOOL RegClass(WNDPROC, LPCTSTR, UINT);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
TCHAR szMainClass[] = TEXT("_MainClass_");
//TCHAR szTitle[] = TEXT("The About Window");
TCHAR szEditClass[] = TEXT("edit");
#define ID_EDIT 1001
HINSTANCE hInstance;
int cxClient, cyClient, cxEdit, cyEdit;
int iNumberInstanceApplication = 0; //Номер окна, правда, не работает.)
int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPTSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd = NULL;
MSG msg = { };
hInstance = hInst;
if (!RegClass(WndProc, szMainClass, COLOR_BTNFACE)) //регистрирую класс окна
return FALSE;
/*TCHAR sz[64], iNum[8]; //пытаюсь создать заголовок
_stprintf_s(sz, 64, TEXT("%s"), TEXT("Window "));
_stprintf_s(iNum, 8, TEXT("%d"), iNumberInstanceApplication);
_tcscat_s(sz, 64, iNum);*/
if (!(hwnd = CreateWindow(szMainClass, TEXT("Title"),
WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX |
WS_MAXIMIZEBOX | WS_THICKFRAME,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, 0, hInst, NULL)))
{
return FALSE;
}
RECT rc;
GetClientRect(hwnd, &rc);
cxEdit = 240, cyEdit = 40;
int cxBeg = (rc.right >> 1) - (cxEdit >> 1);
int cyBeg = 40;
HWND hEdit = NULL, hStatic = NULL;
/*Здесь обрабатываю условие задачи, нужно, при запуске первого экземпляра приложения отобразить окно и 'edet'. При запуске второго экземпляра приложения спросить, хочет ли пользователь, запустить его, если да, то запустить, но без "edit", иначе завершить работу. Но это, на данный момент не важно.*/
if (iNumberInstanceApplication == 1)
{
hStatic = CreateWindow(TEXT("Static"), //Создаётся, но не отображается.
TEXT("Enter password"),
10,100, 150, 40,
WS_CHILD | WS_VISIBLE | WS_BORDER |
SS_CENTER,
hwnd, (HMENU)0, hInstance, NULL);
//SetWindowText(hStatic, TEXT("Enter password"));
/*hEdit = CreateWindow(szEditClass, NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER |
ES_LEFT | ES_PASSWORD,
cxBeg, cyBeg, cxEdit, cyEdit,
hwnd, (HMENU)ID_EDIT, hInstance, NULL);
SetFocus(hEdit);*/
}
else if (iNumberInstanceApplication > 1)
{
int ans = MessageBox(NULL,
TEXT("Do you want to launce another instance of the application"),
TEXT("Question"),
MB_YESNO | MB_ICONQUESTION | MB_RIGHT);
switch (ans)
{
case IDYES:
break;
case IDNO:
DestroyWindow(hwnd);
}
}
else
MessageBox(NULL,
TEXT("Sorry, no application inctance is running"), TEXT("Error"), MB_OK);
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
BOOL RegClass(WNDPROC proc, LPCTSTR szName, UINT brBackground)
{
WNDCLASS wc;
wc.style = wc.cbClsExtra = wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.lpfnWndProc = proc;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(brBackground + 1);
wc.lpszMenuName = (LPCTSTR)NULL;
wc.lpszClassName = szName;
return (RegisterClass(&wc) != 0);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HWND hEdit, hwndCurrent, hStatic;
static int cxClient, cyClient, cxStart, cyStart;
//int nxMin, nxMax;
switch (msg)
{
case WM_CREATE:
hwndCurrent = FindWindow(szMainClass, NULL);
while (hwndCurrent)
{
++iNumberInstanceApplication;
hwndCurrent = FindWindowEx(NULL, hwndCurrent, szMainClass, NULL);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}