Problem z kompilacją WinApi w Visualu 2005, 2010

0

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);
}  
0

W opcjach projektu -> general -> character set -> ustaw na multibyte ...

0

można też do nazwy wszystkich funkcji WinApi przyjmujących jakieś stringi dodać literę A (CreateWindowEx—>CreateWindowExA)

1 użytkowników online, w tym zalogowanych: 0, gości: 1