Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   не создается окно (https://forum.antichat.xyz/showthread.php?t=94139)

fire64 30.11.2008 00:01

не создается окно
 
подскажите что не так в этом коде

дело в том что выполняется условие

if (!hWnd)
{
return false;
}

и окно не создается



PHP код:

#include <windows.h>

#include "stdafx.h"

extern HMODULE hClientApp;

LPCTSTR lpszAppName  "MyApp";
LPCTSTR lpszTitle    "My Application"



bool Wind_Init() 
{


   
MSG        msg;
   
HWND       hWnd
   
WNDCLASSEX wc;

   
// Register the application window class.
   //............................................
   
wc.style         CS_HREDRAW CS_VREDRAW;
 
//  wc.lpfnWndProc   = (WNDPROC)WndProc;       
   
wc.cbClsExtra    0;                      
   
wc.cbWndExtra    0;                      
   
wc.hInstance     = (HINSTANCE)hClientApp;              
   
wc.hIcon         LoadIcon( (HINSTANCE)hClientApplpszAppName ); 
   
wc.hCursor       LoadCursor(NULLIDC_ARROW);
   
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
   
wc.lpszMenuName  lpszAppName;              
   
wc.lpszClassName lpszAppName;              
   
wc.cbSize        sizeof(WNDCLASSEX);
//   wc.hIconSm       = LoadImage( (HINSTANCE)hClientApp, lpszAppName, 
  //                               IMAGE_ICON, 16, 16,
    //                             LR_DEFAULTCOLOR );
    
if (!RegisterClassEx( &wc )) 
    {
        return 
false;
    }

    
hWnd CreateWindowlpszAppName
                        
lpszTitle,    
                        
WS_OVERLAPPEDWINDOW

                        
//size windows

                        
400,   // координаты окна по ширине
                        
300,   // координаты окна по высоте
                        
170,  //  ширина окна
                        
350,   //  высота окна
                        

                        
NULL,              
                        
NULL,              
                        (
HINSTANCE)hClientApp,         
                        
NULL               
                      
);

    if (!
hWnd
    {
        return 
false;
    }    
    
   
ShowWindowhWnd); 
   
UpdateWindowhWnd );

   while( 
GetMessage( &msgNULL00) )   
   {
      
TranslateMessage( &msg ); 
      
DispatchMessage( &msg );  
   }

    return 
true;



0verbreaK 30.11.2008 00:04

GetLastError что говорит?

bons 30.11.2008 14:29

вот работающий код минимального окна

Код:

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
    {
    static char szAppName[] = "HelloWin" ;
    HWND        hwnd ;
    MSG        msg ;
    WNDCLASSEX  wndclass ;

    wndclass.cbSize        = sizeof (wndclass) ;
    wndclass.style        = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc  = WndProc ;
    wndclass.cbClsExtra    = 0 ;
    wndclass.cbWndExtra    = 0 ;
    wndclass.hInstance    = hInstance ;
    wndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor      = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName  = NULL ;
    wndclass.lpszClassName = szAppName ;
    wndclass.hIconSm      = LoadIcon (NULL, IDI_APPLICATION) ;

    RegisterClassEx (&wndclass) ;

    hwnd = CreateWindow (szAppName,        // window class name
                            "The Hello Program",    // window caption
                    WS_OVERLAPPEDWINDOW,    // window style
                    CW_USEDEFAULT,          // initial x position
                    CW_USEDEFAULT,          // initial y position
                    CW_USEDEFAULT,          // initial x size
                    CW_USEDEFAULT,          // initial y size
                    NULL,                    // parent window handle
                    NULL,                    // window menu handle
                    hInstance,              // program instance handle
                            NULL) ;                            // creation parameters

    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;

    while (GetMessage (&msg, NULL, 0, 0))
          {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
          }
    return msg.wParam ;
    }

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
    HDC        hdc ;
    PAINTSTRUCT ps ;
    RECT        rect ;

    switch (iMsg)
          {

          case WM_PAINT :
                  hdc = BeginPaint (hwnd, &ps) ;

              GetClientRect (hwnd, &rect) ;

              DrawText (hdc, "Hello, world", -1, &rect,
                                    DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

                  EndPaint (hwnd, &ps) ;
              return 0 ;

          case WM_DESTROY :
              PostQuitMessage (0) ;
              return 0 ;
          }

    return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
    }


t04 30.11.2008 14:48

Код:

procedure WndProc(hWnd,uMsg:LongWord;wParam,lParam:Longint) stdcall;
begin
  case uMsg of
    WM_DESTROY: PostQuitMessage(0);
  DefWindowProc(hWnd,uMsg,wParam,lParam);
end;

...
в заполнении WNDCLASSEX
  wc.lpfnWndProc:=@WndProc;

Код:

ShowWindow( hWnd, 0 );

const
  SW_HIDE = 0;
  SW_NORMAL = 1;

сделай
ShowWindow( hWnd, SW_NORMAL );
или
ShowWindow( hWnd, 1 );

убери
Код:

    if (!hWnd) 
    {
        return false;
    }

так никто не делает
сделай так

if (hWnd=INVALID_HANDLE_VALUE)or(hWnd<1) then
exit;

Dian 30.11.2008 16:43

Цитата:

подскажите что не так в этом коде
Закомменчено присвайвание указателя на оконную процедуру. Без нее работать не может.
А вообще обычно лучше смотреть код ошибки

0verbreaK 30.11.2008 20:53

Dian без обработчика тоже должно работать, для окна не совсем нужен он.

t04 01.12.2008 00:24

думаю что ошибка в каком то ненормальном if операторе

никогда не видел чтобы писали такое

делфи даже не скомпилирует такое "чудо"

bons 01.12.2008 01:15

:))
потому что это не делфи;)

De-visible 01.12.2008 02:42

t04, ты помоему темой ошибся.

sn0w 01.12.2008 11:59

топикстартер, а как ты предлагаешь окну работать если в твоем коде:

// wc.lpfnWndProc = (WNDPROC)WndProc;

?!?!?


Время: 17:28