Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Απο template ειναι.

 

 

 

>// test2.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "test2.h"
#include <vector>


#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;								// current instance
TCHAR szTitle[MAX_LOADSTRING];					// The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];			// the main window class name
std::vector<POINT> points;

// Forward declarations of functions included in this code module:
ATOM				MyRegisterClass(HINSTANCE hInstance);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK	About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                	HINSTANCE hPrevInstance,
                	LPTSTR    lpCmdLine,
                	int   	nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

	// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;

// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_TEST2, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
	return FALSE;
}

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TEST2));

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
	if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
}

return (int) msg.wParam;
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage are only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style			= CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc	= WndProc;
wcex.cbClsExtra		= 0;
wcex.cbWndExtra		= 0;
wcex.hInstance		= hInstance;
wcex.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST2));
wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName	= MAKEINTRESOURCE(IDC_TEST2);
wcex.lpszClassName	= szWindowClass;
wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HINSTANCE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
  HWND hWnd;

  hInst = hInstance; // Store instance handle in our global variable

  hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
     CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

  if (!hWnd)
  {
     return FALSE;
  }

  ShowWindow(hWnd, nCmdShow);
  UpdateWindow(hWnd);

  return TRUE;
}

//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND	- process the application menu
//  WM_PAINT	- Paint the main window
//  WM_DESTROY	- post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
	wmId    = LOWORD(wParam);
	wmEvent = HIWORD(wParam);
	// Parse the menu selections:
	switch (wmId)
	{
	case IDM_ABOUT:
		DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
		break;
	case IDM_EXIT:
		DestroyWindow(hWnd);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	break;
case WM_PAINT:
	{
	hdc = BeginPaint(hWnd, &ps);
	// TODO: Add any drawing code here...
	
	//ena tetragwno etsi gia na blepoyme tis perioxes
	Rectangle(hdc,0,0,600,600);
	//to kartaisiano
	MoveToEx(hdc,300,0,NULL);
	LineTo(hdc,300,600);
	MoveToEx(hdc,0,300,NULL);
	LineTo(hdc,600,300);

	HGDIOBJ hOld = SelectObject(
		hdc,
		CreatePen(PS_SOLID,2,RGB(255,0,0)));

	POINT p;
	
	for(float pi = (3.14*2.0f)* -1.0f ; pi < 3.14f * 2.f; pi += 0.1f)
	{
		//f(x) = cos(x)
		float x = pi;
		float y = cos(x);
		
		//reverse top y -> -y
		y *= -1.0f;


		//scale [-2π,2π] -> [-300,300]
		float f = 300.0f / (2.f * 3.14f);
		x *= f;
		y *= f;

		//transpose top left x,y = 0 -> top-left x,y = 600/2
		x += 600.0f /2.0f;
		y += 600.0f /2.0f;

		//convert
		p.x = (long) x;
		p.y = (long) y;
		points.push_back(p);
	}
	//draw

	Polyline(hdc,points.data(),points.size());
	DeleteObject(
		SelectObject(hdc,hOld));
	EndPaint(hWnd, &ps);
	}
	break;
case WM_MOUSEMOVE:
	{
		static int lastX = GET_X_LPARAM(lParam);
		if(lastX != GET_X_LPARAM(lParam))
		{

			
			lastX = GET_X_LPARAM(lParam);
		}
	}
	break;
case WM_DESTROY:
	PostQuitMessage(0);
	break;
default:
	return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
	return (INT_PTR)TRUE;

case WM_COMMAND:
	if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
	{
		EndDialog(hDlg, LOWORD(wParam));
		return (INT_PTR)TRUE;
	}
	break;
}
return (INT_PTR)FALSE;
}

 

 

 

 

Αν το κανω dialog based θα ειναι λιγοτερες απο 50 γραμμες...

 

να και με dialog based

>#include <Windows.h>
#include <vector>
#include "resource.h"

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

int WINAPI wWinMain(HINSTANCE hInst,HINSTANCE,LPWSTR,int nShow)
{
 
return DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,WndProc);
}
BOOL CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC			hdc;
std::vector<POINT> points;
switch(msg)
{
case WM_PAINT:
	{
		hdc = BeginPaint(hWnd,&ps);
					//ena tetragwno etsi gia na blepoyme tis perioxes
		Rectangle(hdc,0,0,600,600);
		//to kartaisiano
		MoveToEx(hdc,300,0,NULL);
		LineTo(hdc,300,600);
		MoveToEx(hdc,0,300,NULL);
		LineTo(hdc,600,300);

		HGDIOBJ hOld = SelectObject(
			hdc,
			CreatePen(PS_SOLID,2,RGB(255,0,0)));

		POINT p;
	
		for(float pi = (3.14*2.0f)* -1.0f ; pi < 3.14f * 2.f; pi += 0.1f)
		{
			//f(x) = cos(x)
			float x = pi;
			float y = cos(x);
		
			//reverse top y -> -y
			y *= -1.0f;


			//scale [-2π,2π] -> [-300,300]
			float f = 300.0f / (2.f * 3.14f);
			x *= f;
			y *= f;

			//transpose top left x,y = 0 -> top-left x,y = 600/2
			x += 600.0f /2.0f;
			y += 600.0f /2.0f;

			//convert
			p.x = (long) x;
			p.y = (long) y;
			points.push_back(p);
		}
		//draw

		Polyline(hdc,points.data(),points.size());
		DeleteObject(
			SelectObject(hdc,hOld));
			EndPaint(hWnd,&ps);
	}break;
default:
	return 0;
}
return 1;
}

 

  • Απαντ. 54
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Δημοσ.

Τι να συγκρινω ρε συ mig; Εγω μιλησα για abstraction, και εσυ μου λες για διαφορα vs.. Α ναι, δεν μιλαω γενικα μιλαω για το συγκεκριμενο νημα που κατα τυχη θελει stand alone exe, φυσικα ποσταρα οτι ποστρα επειδη ειδα GL!

 

ΥΓ Αν θες τι γνωμη μου για ολα αυτα τα frameworks.. Μπουρδες. Οπως και τα cross-platform-native-whatever ΜΠΟΥΡΔΕΣ.

Απλα πραγματα

Windows -> gdi ξερο!

Linux-> gtk/gnome ξερο!

Mac -> δεν εχω λεφτα ξερο!

Cross-Platform -> java ξερο!

 

Ολα αυτα περι του cross-platform-native-whatever μου φερνει στο μυαλο ενα τυπα που πηρε linux με xp thems

Δημοσ.

Δεν μίλησα καθόλου για vs φίλε παπι, μίλησα και μιλάω για πολύ λιγότερο και πολύ πιο απλό κώδικα που φέρνει το ίδιο αποτέλεσμα.

 

Btw, σε QT...

 

>
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPushButton helloButton("Hello World");
helloButton.resize(80, 20);
helloButton.show();
return app.exec();
}

Δημοσ.

Εγώ φταίω που το GUI programming σε Win32 θέλει 3πλάσιο κώδικα από σχεδόν οποιοδήποτε cross-platform GUI;

 

 

 

>
#include <gtk/gtk.h>

int main (int argc, char *argv[])
{
GtkWidget *window;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_container_add(GTK_CONTAINER(window), gtk_label_new("Hello, world!") );
gtk_widget_show_all(window);

gtk_main();

return 0;
}

 

 

Δημοσ.

Για όλα τα παραπάνω που τώρα μόλις διάβασα δεν μπορώ να εκφέρω γνώμη!

Το μόνο που είδα και κατάλαβα είναι το μέγεθος τον κωδικών (για fltk,gtk,qt) για να βγάλει το HELLO WORLD!!

Έχω κατεβάσει ήδη το Qt creator και έχω τρέξει κάποια demos που περιλαμβάνει και χωρίς να πολυκαταλαβαίνω των κώδικα ψιλοβγάζω άκρη(ή τουλάχιστον έτσι νομίζω)!

Το παρακάτω video είναι ένα από τα πολλά που έχω δεί (το πιο απλό μάλλον) και με έβαλε λίγο πολύ στην ιδέα του τι χρειάζομαι!!

 

εδώ

 

Αυτό που δεν έχω καταλάβει είναι ποια η διαφορά του Qt creator από το Qt designer!

Όσο για τα GTK και FLTK έτυχε να μην τα κατεβάσω πρώτα οπότε δεν έχω ασχοληθεί και πολύ μαζί τους!Αν πιστεύετε ότι κάποιο από τα τρια είναι πιο εύκολο για κάποιον με τις δικές μου "απειροελάχιστες γνώσεις" πείτε το μου να ξεκινήσω με αυτό!

Πάντως το Qt creator πιστεύω ότι είναι ότι πρέπει για την περίπτωσή μου και μου φαίνεται βατό!

 

Τώρα το πόσο θα βρώ δυσκολίες μπροστά μου με το Qt είναι μεγάλο θέμα!

Αλλά από κάπου πρέπει να ξεκινήσω!

Δημοσ.

Εφόσον το βρίσκεις βατό το QT συνέχισε με αυτό (το FLTK είναι πιο απλό, αλλά το FLUID που είναι για σχεδιασμό ui είναι πολύ cryptic... το GTK+ δεν το χρειάζεσαι σε C++).

 

QT Creator είναι το IDE, QT-Designer είναι για σχεδιασμό ui (μέσα στο QT-Creator).

Δημοσ.

Εφόσον το βρίσκεις βατό το QT συνέχισε με αυτό (το FLTK είναι πιο απλό, αλλά το FLUID που είναι για σχεδιασμό ui είναι πολύ cryptic... το GTK+ δεν το χρειάζεσαι σε C++).

 

QT Creator είναι το IDE, QT-Designer είναι για σχεδιασμό ui (μέσα στο QT-Creator).

 

Σε ευχαριστώ που μου έλυσες ακόμη μια απορία!!

Σας είμαι υπερευγνώμων!!

Δημοσ.

 

Μίας και πιάσατε τα GUIs..

 

Ευτυχώς υπάρχει και ο C++ Builder που παράγει native (WinAPI) κώδικα σε C++, δίχως πολλά - πολλά (εξωτερικές βιβλιοθήκες DLL κλπ):

>
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TButton *btnHello = new TButton(this);
btnHello->Parent = this;
btnHello->Caption= "Hello!";
btnHello->SetBounds(
	ClientRect.CenteredRect(btnHello->ClientRect).Left,
	ClientRect.CenteredRect(btnHello->ClientRect).Top,
	btnHello->ClientRect.Width(),
	btnHello->ClientRect.Height());
}

post-41640-0-80149300-1324583147_thumb.png

:D

 

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...