Ошибка регистрации окна

marevenc

Помогите, пожалуйста, найти ошибку. Компилируется нормально, но при выполнении вылетает, не получается зарегистрировать окно
#include <windows.h>
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow)
{
const char g_szClassName[]="myWindowClass";
WNDCLASSEX wc;
wc.cbSize        =sizeof(WNDCLASSEX);
wc.cbClsExtra    =0;
wc.cbWndExtra    =0;
wc.hbrBackground =CreateSolidBrush(RGB(0,0,255));;
wc.hCursor       =LoadCursor(NULL, IDC_ARROW);
wc.hIcon         =LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm       =LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance     =hInstance;
wc.lpfnWndProc   =WndProc;
wc.lpszClassName =g_szClassName;
wc.lpszMenuName  =NULL;
wc.style         =WS_HSCROLL | WS_OVERLAPPEDWINDOW;
 
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
           MB_ICONEXCLAMATION | MB_OK); 
           return 0;                        
}
HWND hwnd;
hwnd=CreateWindow(
    g_szClassName,
    TEXT("Name"),
    WS_OVERLAPPEDWINDOW | WS_HSCROLL,
    100,
    400,
    450,
    250,
    NULL,
    NULL,
    hInstance,
    NULL);
    
if(hwnd==NULL)
{
   MessageBox(NULL, "Window Creation Failed!", "Error!",
           MB_ICONEXCLAMATION | MB_OK); 
           return 0;            
}
 
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
 
MSG Msg;
while(GetMessage(&Msg,NULL,0,0)>0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);                                 
}
return Msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hwnd,
                         UINT msg,
                         WPARAM wParam,
                         LPARAM lParam)
{
   switch(msg)
   {
      case WM_CLOSE:
          DestroyWindow(hwnd);
      break;
      case WM_DESTROY:
          PostQuitMessage(0);
      break;
      default:
          return DefWindowProc(hwnd,msg,wParam,lParam);
   }
   return 0;
}
4 ответа

marevenc

wc.style = CS_HREDRAW | CS_VREDRAW;


marevenc

Работающий код
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE,
                         LPSTR , int )
 
        {
            MSG  Msg;     // структура для получения сообщений
            WNDCLASS wc;  // структура для задания хар-к окна
              HDC hdc = GetDC (hWnd);
   char szTitle [] = "название прогр.";
           memset (&wc, 0, sizeof(wc));  //обнуление структ. wc
 
                wc.lpszClassName  =  szClassName;
            wc.style          =  CS_SAVEBITS;
                wc.hInstance        =  hInst;
                wc.lpfnWndProc    =  WndProc;
                wc.hCursor          =   LoadCursor(NULL,IDC_ARROW);
                wc.hIcon                =   LoadIcon(NULL, IDC_ARROW);
               wc.hbrBackground =   CreateSolidBrush(N_Color);
 
// регистрация окна в системе
//........... RegisterClass (&wc) .........................
        if ( RegisterClass (&wc) == 0)
       MessageBox (hWnd, "error1", "error1", MB_ICONSTOP);


marevenc

Спасибо большое, вы мне очень помогли!


marevenc

marevenc, посмотри сюда API окно VisualStudio 6.0 там готовый API проект создающий окошко через CreateWindow