окно не хочет перемещатся (

Тема в разделе "WASM.BEGINNERS", создана пользователем XshStasX, 9 май 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Код (Text):
    1. int APIENTRY WinMain(HINSTANCE hInstance,
    2.                      HINSTANCE hPrevInstance,
    3.                      LPSTR     lpCmdLine,
    4.                      int       nCmdShow)
    5. {
    6.  
    7.  WNDCLASS tag               = {0};
    8.  HWND   hwnd                = {0};
    9.  ATOM  RegWindow            = {0};
    10.  CREATESTRUCT WindowStruct  = {0};
    11.  
    12.  tag.hInstance      = hInstance;
    13.  tag.style          = CS_BYTEALIGNCLIENT | CS_DBLCLKS;
    14.  tag.lpszClassName  = WindowClass;
    15.  tag.lpfnWndProc    = TMyWindowProc;
    16.  tag.hbrBackground  = 0;
    17.  
    18.  tag.hCursor  = LoadCursor(NULL,IDC_ARROW);
    19.  tag.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    20.  
    21.  LoadPicture();
    22. if( (RegWindow=RegisterClass(&tag)) == 0) return -1;
    23.  hwnd = CreateWindow(&WindowClass[0],"MainWindow",  WS_VISIBLE| WS_OVERLAPPEDWINDOW,400,100,nWidth,nHeight,0,(HMENU)0,hInstance,(LPVOID)&WindowStruct);
    24.  
    25.   ShowWindow(hwnd,SW_SHOW);
    26.   UpdateWindow(hwnd);
    27.  
    28.  
    29.   MSG msg;
    30.   hdc = GetDC(hwnd);
    31.   hdcMem = CreateCompatibleDC(hdc);
    32.   SetTimer(hwnd,ID_TIMER,100,0);
    33.  
    34. while (GetMessage(&msg,hwnd,0,0))
    35. {  
    36.     TranslateMessage(&msg);
    37.     DispatchMessage(&msg);
    38. };
    39. return msg.wParam;
    40. }
    41.  
    42. LRESULT CALLBACK TMyWindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
    43. {
    44.  
    45.   switch (uMsg)
    46.   {
    47.    
    48.    
    49.    case (WM_PAINT):
    50.       {
    51.           PAINTSTRUCT paint = {0};
    52.           BITMAP bm;
    53.           POINT ptSize;
    54.           paint.hdc = hdc;
    55.  
    56.          SelectObject(hdcMem, BitMap[NEBO]);
    57.                         StretchBlt(hdc,0,0,nWidth,nHeight,hdcMem,0,0,640,480,SRCCOPY);
    58.                  break;
    59.       };
    60.    case(WM_DESTROY):
    61.        {
    62.            PostQuitMessage(NULL);
    63.            break;
    64.        };
    65.    case (WM_SYSCOMMAND):
    66.        {
    67.          if (wParam == SC_MOVE)
    68.              MoveWindow(hwnd,(lParam & 0x0000FFFF),(lParam & 0xFFFF0000),nWidth,nHeight,true);
    69.            break;
    70.        };
    71.    
    72.    case (WM_TIMER):
    73.        {
    74.            double t1,t2,dx = X,dy = Y ;
    75.          t1= cos(Time);
    76.          t2= sin(Time);
    77.          X=t1*175;
    78.          Y=t2*37;
    79.          dx-=X;
    80.          dy-=Y;
    81.          L += sqrt(fabs(dx*dx + dy*dy));
    82.          if (Time >= 2*3.14)
    83.              Time = 0;
    84.          Time+=0.03;
    85.          PostMessage(hwnd,WM_PAINT,0,0);
    86.          break;        
    87.        };
    88.       break;
    89.   };
    90. DefWindowProc(hwnd,uMsg,wParam,lParam);
    91.   return 1;
    92. };
    Создается окно и все почти хорошо но оно не реагирует на мышь(точнее не перемещается, и нельзя нажать кнопку закрыть(() почему ?
    И еще как избавится от того что отдельные элементы окна мерцают при перерисовки ?
    Пробивал ставить перерисовку между beginPaint(..) endPaint(...) , в таком случаи перерисовка срабатывает только при разворачивании окна ((
     
  2. FLASH300

    FLASH300 New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2008
    Сообщения:
    72
    Если не изменяет память то если мы обрабатываем сообщение то возвращаем 0 (return 0; вместо break;) если нет то return DefWindowProc(hWnd, uMsg, wParam, lParam);. DefWindowProc как бы сама должна справляться с перетаскиванием окон.
     
  3. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    спс помогло )