График на Visual С++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Adult Holding, 19 Dec 2009.

  1. Adult Holding

    Adult Holding Elder - Старейшина

    Joined:
    7 Oct 2009
    Messages:
    142
    Likes Received:
    175
    Reputations:
    248
    Всем спасибо!
     
    #1 Adult Holding, 19 Dec 2009
    Last edited: 24 Jun 2010
  2. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    С этим языком не знаком, но уверен, что есть готовые классы по построению графиков.

    Юзай гугль
     
  3. Noir

    Noir New Member

    Joined:
    20 Oct 2009
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    Code:
    #include <windows.h>
    #include <tchar.h>
    #include <math.h>
    
    #define MAXLENTH 100
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
    ATOM MyRegisterClass(HINSTANCE hInstance);
    
    TCHAR szAppName[] = _TEXT("Graphic");
    TCHAR szTitleMain[MAXLENTH];
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
    	HWND hWndMain;
    	MSG msg;
    
    
    	if(!MyRegisterClass(hInstance))
    	{
    		//MessageBox(hWnd,_TEXT("Can't register class"),_TEXT("Error..."), MB_OK | MB_ICONINFORMATION);
    	}
    	LoadString(hInstance,101,szTitleMain,MAXLENTH);
    	hWndMain = CreateWindow(szAppName,szTitleMain,WS_OVERLAPPEDWINDOW,
    							CW_USEDEFAULT,CW_USEDEFAULT,
    							CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,
    							hInstance,NULL);
    	ShowWindow(hWndMain, iCmdShow);
    	UpdateWindow(hWndMain);
    
    	while(GetMessage(&msg,NULL,0,0))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    	return msg.wParam;
    }
    
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    	WNDCLASSEX wcex;
    	wcex.cbSize = sizeof(WNDCLASSEX);
    	wcex.cbClsExtra	= 0;
    	wcex.cbWndExtra = 0;
    	wcex.style = CS_VREDRAW | CS_HREDRAW;
    	wcex.lpfnWndProc = WndProc;
    	wcex.hInstance = hInstance;
    	wcex.hCursor = LoadCursor(NULL,IDC_ARROW);
    	wcex.hIcon = LoadIcon(NULL,IDI_QUESTION);
    	wcex.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
    	wcex.lpszMenuName = NULL; // Пока не используем
    	wcex.hIconSm = LoadIcon(NULL,IDI_QUESTION);
    	wcex.lpszClassName = szAppName;
    	return RegisterClassEx(&wcex);
    }					
    
    float fn(float x)
    {
    	return 3*x-cos(x) - 1;
    }
    
    LRESULT CALLBACK WndProc (HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
    	HDC hDC;
    	PAINTSTRUCT ps;
    	RECT rect;
    	static int draw_graf;
    	static int clx,cly,mx=20,my=20;
    	switch(iMsg)
    	{
    	case WM_CREATE:
    		draw_graf = 1;
    		return 0;
    	case WM_SIZE:
    		clx = LOWORD(lParam);
    		cly = HIWORD(lParam);
    	case WM_PAINT:
    		hDC = BeginPaint(hWnd,&ps);
    		GetClientRect(hWnd,&rect);
    		
    		if(draw_graf)
    		{MoveToEx(hDC,0,cly/2,NULL);
            LineTo(hDC,clx,cly/2);
            LineTo(hDC,clx-5,(cly/2)-5);
            MoveToEx(hDC,clx,cly/2,NULL);
            LineTo(hDC,clx-5,(cly/2)+5);
    
            MoveToEx(hDC,clx/2,cly,NULL);
            LineTo(hDC,clx/2,0);
            LineTo(hDC,(clx/2)-5,5);
            MoveToEx(hDC,(clx/2)+5-1,5-1,NULL);
            LineTo(hDC,clx/2,0);
    
    			for(int i=0;i<clx;i++)
    				SetPixel(hDC,i,(cly/2)-my*fn((float)i/mx),RGB(255,50,9));
    		}
    		EndPaint(hWnd,&ps);
    		return 0;
    	case WM_LBUTTONDOWN:
    		if(mx<256)
    		{
    			mx*=2;
    			my=mx;
    			draw_graf=1;
    			InvalidateRect(hWnd,NULL,true);
    		}
    		return 0;
    	case WM_RBUTTONDOWN:
    		if(mx>32)
    		{
    			mx/=2;
    			my=mx;
    			draw_graf=1;
    			InvalidateRect(hWnd,NULL,true);
    		}
    		return 0;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		return 0;
    	}
    	return DefWindowProc(hWnd,iMsg,wParam,lParam);
    }
    

    Извени вот только не компилировал, должно работать
     
  4. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Это просто деградация!!! График нарисовать не могут :D Тогда назревает вопрос: А что вообще могут в наше время студенты? :D
     
  5. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    думать точно не умеют. идут учиться на специальности, в которых абсолютные нули.
    по сабжу - чтобы построить график в школе же наверное учили - нужно заполнить таблицу f(x).
    Ну а потом через функцию LineTo построить сам график, соединив последовательно точки таблицы. Noir, привыкай отделять логику от представления. Не должно окно само считать и тут же рисовать. Привыкайте к хорошему стилю.
     
  6. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Или проще меняешь х(тоесть увеличиваешь его), и рисуешь точку.Тут буквально 6-10 строк кода :D
     
  7. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    В теме новичкам просил один тело перевести Char To ASCП, Сразу видно что задание списал с личсточка и даже понятия не имеет что-такое ASCП (ASCII)
     
  8. ~Shapaev~

    ~Shapaev~ Member

    Joined:
    24 Oct 2009
    Messages:
    29
    Likes Received:
    7
    Reputations:
    0
    «Adult Holding» тебе дал рабочий код , более того там можно не только эту функцию рисовать.
     
  9. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    оффтоп

    они просто думают, что в институте их обучат ухахаха

    а там почему-то дают задание на лабы и непонятную методичку (если она вообще есть). Вот и появляются Char To ASCП. Мой знакомый лаборант, только на 3м курсе увидел, что у компьютера внутри, а на первом даже не знал, какие разъемы для чего нужны. Но самые веселые первокуры из области. Мы минут 10 смотрели как парень сидел перед BSOD и пытался нажать что-то типа Ctrl+alt+delite xD
     
    _________________________