| | |
| Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
Autor | Správa |
---|
|
Dobrý deň Mám takýto kód: Kód: #include <stdio.h> #include <windows.h> // Win32API Header File
#define Red RGB (255,0,0) // definicia vlastnych farieb (Red+Green+Blue) #define Lime RGB (206,255,0) #define Blue RGB (0,0,255)
// nasleduje deklaracia troch funkcii, ktore // budeme pouzivat, definica na konci programu
int BCX_Line (HWND,int,int,int,int,int,HDC); // kresli ciaru int BCX_Circle (HWND,int,int,int,int,int,HDC); // kresli kruznicu HWND GetConsoleWndHandle (void); // ziska handle na okno
/* ************************************************************************** */ /* */ /* Tu zacina hlavny program */ /* */ /* ************************************************************************** */
int main(int argc, char *argv[]) {
static HWND hConWnd; hConWnd = GetConsoleWndHandle(); // ziskanie handle na okno
// tu zacina priestor pre vasu tvorivost: BCX_Circle(hConWnd, 150, 130, 105, Blue,0,0); BCX_Line(hConWnd, 5, 5, 800, 600, Red,0); BCX_Line(hConWnd, 295, 5, 5, 250, Lime,0);
scanf("?"); // na konci pockame na ENTER, aby obrazok hned nezmizol... return 0; }
/* ************************************************************************** */ /* */ /* Nasleduju definicie funkcii, nepredpoklada sa, ze by ste tu cokolvek */ /* menili, ale nie je to zakazane, mozete tak docielit mnohe zaujimave */ /* efekty... */ /* */ /* ************************************************************************** */
/* ************************************************************************** */ /* */ /* Funkcia BCX_Line */ /* */ /* HWND Wnd : handle okna */ /* int x1, y1 : suradnice pociatocneho bodu */ /* int x2, y2 : suradnice koncoveho bodu */ /* int Pen : farba */ /* HDC DrawHDC : kontext zariadenia */ /* */ /* Funkcia nakresli ciaru z bodu [x1,y1] do bodu [x2,y2] farbou Pen. */ /* */ /* ************************************************************************** */
int BCX_Line (HWND Wnd,int x1,int y1,int x2,int y2,int Pen,HDC DrawHDC) { int a,b=0; HPEN hOPen; HPEN hNPen = CreatePen(PS_SOLID, 2, Pen); // penstyle, width, color if (!DrawHDC) DrawHDC = GetDC(Wnd), b = 1; hOPen = (HPEN)SelectObject(DrawHDC, hNPen); MoveToEx(DrawHDC, x1, y1, NULL); // starting point of line a = LineTo(DrawHDC, x2, y2); // ending point of line DeleteObject(SelectObject(DrawHDC,hOPen)); if (b) ReleaseDC(Wnd, DrawHDC); return a; }
/* ************************************************************************** */ /* */ /* Funkcia BCX_Circle */ /* */ /* HWND Wnd : handle okna */ /* int X, Y : suradnice stredu kruznice */ /* int R : polomer */ /* int Pen : farba */ /* int Fill : vypln */ /* HDC DrawHDC : kontext zariadenia */ /* */ /* Funkcia nakresli kruznicu so stredom [X,Y], polomerom R farbou Pen. */ /* */ /* Kruznicu kresli pomocou WinApi funkcie na kreslenie elipsy */ /* zadanej ohranicujucim obdlznikom so suradnicami laveho horneho */ /* a praveho dolneho rohu. /* */ /* ************************************************************************** */
int BCX_Circle(HWND Wnd,int X,int Y,int R,int Pen,int Fill,HDC DrawHDC) { int a, b = 0; if (!DrawHDC) DrawHDC = GetDC(Wnd), b = 1;
HPEN hNPen = CreatePen(PS_SOLID, 2, Pen); // penstyle, width, color HPEN hOPen = (HPEN)SelectObject(DrawHDC, hNPen); HBRUSH hOldBrush; HBRUSH hNewBrush; if (Fill) // if true will fill circle with pencolor { hNewBrush = CreateSolidBrush(Pen); hOldBrush = (HBRUSH)SelectObject(DrawHDC, hNewBrush); } else // else just draw circle { hNewBrush = (HBRUSH)GetStockObject(NULL_BRUSH); hOldBrush = (HBRUSH)SelectObject(DrawHDC, hNewBrush); }
a = Ellipse(DrawHDC, X-R, Y+R, X+R, Y-R);
DeleteObject(SelectObject(DrawHDC, hOPen)); DeleteObject(SelectObject(DrawHDC, hOldBrush)); if (b) ReleaseDC(Wnd, DrawHDC); return a; }
/* ************************************************************************** */ /* */ /* Funkcia GetConsoleWndHandle(void) */ /* */ /* ************************************************************************** */ // the hoop ...
HWND GetConsoleWndHandle(void) { HWND hConWnd;
OSVERSIONINFO os; char szTempTitle[64], szClassName[128], szOriginalTitle[1024];
os.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); GetVersionEx( &os ); // may not work on WIN9x if ( os.dwPlatformId == VER_PLATFORM_WIN32s ) return 0;
GetConsoleTitle( szOriginalTitle, sizeof( szOriginalTitle ) ); sprintf( szTempTitle,"%u - %u", GetTickCount(), GetCurrentProcessId() ); SetConsoleTitle( szTempTitle ); Sleep( 40 );
// handle for NT hConWnd = FindWindow( NULL, szTempTitle ); SetConsoleTitle( szOriginalTitle );
// may not work on WIN9x if ( os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) { hConWnd = GetWindow( hConWnd, GW_CHILD ); if ( hConWnd == NULL ) return 0; GetClassName( hConWnd, szClassName, sizeof ( szClassName ) ); while ( strcmp( szClassName, "ttyGrab" ) != 0 ) { hConWnd = GetNextWindow( hConWnd, GW_HWNDNEXT ); if ( hConWnd == NULL ) return 0; GetClassName( hConWnd, szClassName, sizeof( szClassName ) ); } }
return hConWnd; }
a nasledujúci problém : Viem mi niekto poradiť nejaké riešenie ? Ďakujem
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 04.03.2014 19:33 | |
|
Tá chybová hláška je dosť konkrétna Proste nemôžeš používať typ char* tam, kde sa očakáva typ LPWSTR. Takže tie premenné deklaruj s týmto typom.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 05.03.2014 8:44 | |
|
Ukáž
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 12.07.11 Prihlásený: 09.03.16 Príspevky: 42 Témy: 7 Bydlisko: Presov |
Necital som cely kod, nechce sa mi ale ta chyba spociva v tom ze mas v nastaveni projektu zadane "Use Unicode Character Set" to znamena ze funkcie definovane vo Windows.h budu vyzadovat wide char:
Mozes si to zmenit alebo pouzivat takto: 1. Ak davas len cisto text, ako napríklad: "Windows" tak pouzi L"Windows" 2. nepouzivaj char ale wchar_t
PS: Pises ze je to program v C, ale ak robis pod VS a nepremenujes si svoj subor Grafika_3.cpp na Grafika_3.c tak VS bude pouzivat C++ kompilator
|
|
| Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|