I am trying to create window already for several days, but always it tells me “Cannot create window”
When it randomly creates window, CPU goes 50%. Can you help me and tell what causes that error?
Here is source code:
#include<Windows.h>
int AppRunning=1;
void TellError(LPCWSTR error,HWND hWnd=NULL);
LRESULT CALLBACK WindowProcedure(HWND hWnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
switch(msg){
case WM_KEYDOWN:
AppRunning=0;
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,msg,wparam,lparam);
}
HWND NewWindow(LPCTSTR title,int xpos, int ypos, int width, int height)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WindowProcedure;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = GetModuleHandle(NULL);
wcex.hIcon = NULL;
wcex.hCursor = NULL;
wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = L"Svet-ver1.0";
wcex.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
if(!RegisterClassEx(&wcex)){
TellError(L"Cannot register window!");
return NULL;
}
return CreateWindowEx(WS_EX_CONTROLPARENT, L"Svet3D-ver1.0", title, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE, xpos, ypos, width, height, NULL, NULL, GetModuleHandle(NULL), NULL);
}
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nCmdShow)
{
MSG msg;
HWND hWnd = NewWindow(L"Svet",100,100,500,500);
if(!hWnd){
TellError(L"Cannot create window!");
return 0;
}
while(AppRunning){
if(PeekMessage(&msg,hWnd,0,0,PM_REMOVE)){
if(!IsDialogMessage(hWnd,&msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
DestroyWindow(hWnd);
return 0;
}
void TellError(LPCWSTR error,HWND hWnd){
MessageBox(hWnd,error,NULL,MB_OK);
}
The class name passed to
RegisterClassExis"Svet-ver1.0", but when creating the window you are using a different class name"Svet3D-ver1.0".Also you are using
PeekMessagein the main loop and this will just loop quickly when there are no messages in the queue. This empty loop is what is burning all your CPU (50% is probably because you’ve a dual core system).You should use
GetMessageinstead, that will wait for next message without wasting CPU time.