Witam jak kompiluję kod programu poniżej w kompilatorze innym niż Visual 2005 czy 2010 wszystko gra, lecz gdy kod wrzucę do Visuala to wywalami błędy, którę nakazują użycie rzutowania na typ LPCWSTR i gdy to zrobie wyskakują mi jakieś japońskie znaki, zamiast tekstu z tablicy. WTF ?? Dodam, że kod jest oparty na bazie ksiązki Visual Studio 2005 Programowanie z Windows API w języku C++. Podobno autorowi się to kompiluje, ale kiedy skopiuję żywcem jego kod z ksiązki powtarza się ta sama sytuacja. Kto jest w temacie to prosiłbym o pomoc, ponieważ wolałbym pisać aplikacje okienkowe w Visualu, a nie w pragramach typu Code Bock czy DEV C++ Logi błędów poniżej. Pozdro :)
1>------ Build started: Project: Projekt, Configuration: Debug Win32 ------
1>Compiling...
1>WinApi.cpp
1>c:\users\radosław\documents\visual studio 2005\projects\projekt\projekt\winapi.cpp(43) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'char *const ' to 'LPCWSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\users\radosław\documents\visual studio 2005\projects\projekt\projekt\winapi.cpp(74) : error C2664: 'TextOutW' : cannot convert parameter 4 from 'char [6]' to 'LPCWSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>Build log was saved at "file://c:\Users\Radosław\Documents\Visual Studio 2005\Projects\Projekt\Projekt\Debug\BuildLog.htm"
1>Projekt - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
#include <windows.h>
#define oX 100
#define oY 100
LRESULT CALLBACK ProceduraOkna(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
char* const nameClass = "Window";
int WINAPI WinMain(
HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nShowCmd)
{
WNDCLASSEX wndclassex;
wndclassex.cbSize = sizeof(WNDCLASSEX);
wndclassex.style = CS_VREDRAW | CS_HREDRAW;
wndclassex.lpfnWndProc = ProceduraOkna;
wndclassex.cbClsExtra = 0;
wndclassex.cbWndExtra = 0;
wndclassex.hInstance = hInstance;
wndclassex.hIcon = LoadIcon(0, (LPCTSTR)IDI_APPLICATION);
wndclassex.hCursor = LoadCursor(0, (LPCTSTR)IDC_ARROW);
wndclassex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclassex.lpszMenuName = 0;
wndclassex.lpszClassName = (LPCWSTR)nameClass; // żeby się komplowało trzeba zastosować rzutowanie na typ (LPCWSTR)
wndclassex.hIconSm = LoadIcon(0, (LPCTSTR)IDI_APPLICATION);
RegisterClassEx(&wndclassex);
HWND uchwytOkna = 0;
uchwytOkna = CreateWindowEx(
0,
nameClass, // rzutowanie
"Pierwsze okno", // rzutowanie
WS_OVERLAPPEDWINDOW,
100, 100,
400, 300,
0,
0,
hInstance,
0);
ShowWindow(uchwytOkna, SW_NORMAL);
UpdateWindow(uchwytOkna);
MSG msg;
for(;;)
{
if(0 != GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if(msg.message == WM_QUIT) break;
}
return (int)msg.wParam;
}
LRESULT CALLBACK ProceduraOkna(
HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc = GetDC(hWnd);
char buffor[] = "Tekst";
RECT rect;
switch(message)
{
case WM_PAINT:
GetClientRect(hWnd, &rect);
InvalidateRect(hWnd, &rect, FALSE);
TextOut(hdc, oX, oY, buffor ,(int)strlen(buffor));// rzutowanie na buffor
ReleaseDC(hWnd,hdc);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}