Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Пересовка окна


Автор: Scatman 14.4.2006, 15:28
Вот код
Код

LRESULT CALLBACK MAIN_PROC(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    char str[20];
    int col;
    int  cxClient, cyClient ;
    HDC         hdc ;
    int x,y;
    char s[20];
    char si[10];
    char sx[10],sy[10];
    PAINTSTRUCT ps ;
    bool b = false;
    
    switch (message)
    {
    case WM_INITDIALOG:
        return TRUE;

    case WM_PAINT:
    if(b == true)
        {
               cxClient = LOWORD (wParam) ;
               cyClient = HIWORD (wParam) ;
               hdc = BeginPaint (hDlg, &ps) ;
               
        for(int i=0;i<10;i++)
               {
                    x = rand()%200;
                    y = rand()%200;
                    itoa(i,si,10);
                    point.Create(30);
                    point.array[i].X = x;
                    point.array[i].Y = y;
                    TextOut(hdc, x, y, (LPCTSTR)si, 1); 
                    Ellipse   (hdc,x-2,y-2,x+2,y+2) ;
                    //-------------------//
                    itoa(point.array[i].X,sx,10);
                    itoa(point.array[i].Y,sy,10);
                    strcpy(s, si);
                    strcat(s, "   ->");
                    strcat(s, "(");
                    strcat(s, sx);
                    strcat(s, ";");
                    strcat(s, sy);
                    strcat(s, ")");
                    str[strlen(s+1)] = '\0';
                    SendDlgItemMessage(hDlg,IDC_LIST2,LB_ADDSTRING, 0, (LPARAM)s);
                    //-------------------//
               }
        }
               EndPaint (hDlg, &ps) ;

               return 0 ;

    case WM_COMMAND:
        wmId    = LOWORD(wParam); 
        wmEvent = HIWORD(wParam); 
        if (LOWORD(wParam) == IDCANCEL) //если нажата кнопка Exit
        {
            EndDialog(hDlg, LOWORD(wParam));
            return TRUE;
        }
    // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
                       break;

        case IDM_EXIT:
            DestroyWindow(hDlg);
            break;

        case IDOK2:
            GetDlgItemText(hDlg, IDC_EDIT1, str, 20);
            col = atoi(str);
            b = true;
            return 1;
        
        default:
            return DefWindowProc(hDlg, message, wParam, lParam);
        }
        break;
    }
    return FALSE;
}


проблема в следущем мне надо в обраобтке кнопки IDOK2 вызвать Paint для рисования элипсов!!! так вот как это сделать???

Автор: Fixin 14.4.2006, 15:30
InvalidateRect
Добавлено @ 15:31
Код

                    strcpy(s, si);    
                    strcat(s, "   ->");    
                    strcat(s, "(");    
                    strcat(s, sx);    
                    strcat(s, ";");    
                    strcat(s, sy);    
                    strcat(s, ")");    
                    str[strlen(s+1)] = '\0';
Лучше использовать sprintf или lsprintf

Автор: Scatman 14.4.2006, 21:28
InvalidateRect(Wnd: HWnd; Rect: LPRect; Erase: Bool); но что испоьзовать в качестве параметров LPRect и Bool.

Автор: Fixin 14.4.2006, 22:38
Делаешь так:
либо InvalidateRect(hwnd, NULL, TRUE); - перересовываешь все окно с предварительным стиранием содержимого (медленно но эффективно)
либо InvalidateRect(hwnd, NULL, FALSE); - перересовываешь все окно без предварительного стираниея содержимого (быстро но не эффективно)

Кроме того есть справочники и MSDN

Автор: Scatman 14.4.2006, 22:50
Спасибо я посмотрел в мсдн просто там была проверка обработана кнопка и она не сработала а убрал и все стала нормально. Спасибо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)