Windows API Anfänger Problem

Raven280438

Erfahrenes Mitglied
Hi,

ich habe angefangen mich mit C++ und der Windows API zu beschäftigen. Ich hab einige Tutorials gefunden, um ein einfaches Fenster zu erzeugen. Leider bekomm ich bei allen Tutorials den gleichen Fehler:

Hier mein Quellcode
C++:
#include <windows.h>

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

const char *lpszAppName = "AppName";
const char *lpszTitle   = "Meine erste Applikation";

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
   HWND       hWnd;
   MSG        msg;
   WNDCLASSEX   wc;

   wc.cbSize        =  sizeof(WNDCLASSEX);
   wc.style         =  CS_HREDRAW | CS_VREDRAW;
   wc.lpfnWndProc   =  WndProc;
   wc.cbClsExtra    =  0;
   wc.cbWndExtra    =  0;
   wc.hInstance     =  hInstance;
   wc.hCursor       =  LoadCursor(NULL,IDC_ARROW);
   wc.hIcon         =  LoadIcon(NULL, IDI_APPLICATION);
   wc.hbrBackground =  (HBRUSH)GetStockObject(WHITE_BRUSH);
   wc.lpszClassName =  lpszAppName;
   wc.lpszMenuName  =  lpszAppName;
   wc.hIconSm       =  LoadIcon(NULL, IDI_APPLICATION);

   if( RegisterClassEx(&wc) == 0)
      return 0;

   hWnd = CreateWindowEx(NULL,
                         lpszAppName,
                         lpszTitle,
                         WS_OVERLAPPEDWINDOW,
                         0,
                         0,
                         CW_USEDEFAULT,
                         CW_USEDEFAULT,
                         NULL,
                         NULL,
                         hInstance,
                         NULL);

   if( hWnd == NULL)
      return 0;

   ShowWindow(hWnd, iCmdShow);
   UpdateWindow(hWnd);

   while (GetMessage(&msg, NULL, 0, 0) > 0)
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }
   return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam) {
   switch (umsg)
   {
   case WM_DESTROY:
      {
         PostQuitMessage(0);
         return 0;
      }
   }
   return DefWindowProc(hWnd, umsg, wParam, lParam);
}

Die Fehlermeldung ist immer:
1>c:\users\roman\documents\visual studio 2008\projects\mapeditorv2\mapeditorv2\main.cpp(22) : error C2440: '=' : cannot convert from 'const char *' to 'LPCWSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\users\roman\documents\visual studio 2008\projects\mapeditorv2\mapeditorv2\main.cpp(23) : error C2440: '=' : cannot convert from 'const char *' to 'LPCWSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Kann mir jemand weiterhelfen?


Ich bin zeimlicher Anfänger was C++ angeht. Wenn jemand Lust hat mir ab und zu bei Problemen weiterzuhelfen, kann sich ja mal im ICQ bei mir melden. Meine Nummer ist 70143741



Gruß
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

anhand der Fehlermeldung gehe ich davon aus, dass du mit Visual Studio programmierst. Hier werden alle Projekte standardmäßig mit Unicode-Unterstützung angelegt. Da gibt es für dich jetzt zwei Möglichkeiten:

1. In den Projekteinstellungen bei "Konfigurationseigenschaften" und "Allgemein" bei Zeichensatz von Unicode auf Multi-Byte umstellen.

2. Statt "char" "TCHAR" verwenden und für alle Zeichenkettendefinitionen das "_T" - Makro verwenden, z.B:
C++:
const TCHAR *lpszAppName = _T("AppName");
Gruß
MCoder
 
Hey,

ich programmiere auch WinAPI, aber ich hab bei meinen szAppName's kein * dran.
Versuche es mal ohne:

Code:
LRESULT CALLBACK MainProc(HWND, UINT, WPARAM, LPARAM);  //Hauptfenster

const char szMainname[] = "Beispielprogramm";

int iWindowX = 320;
int iWindowY = 640;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    WNDCLASS wc;
    HWND hWnd;
    MSG msg;
    
    hGlobalInstance = hInstance;
    
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = MainProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon         = LoadIcon(NULL, "Icon.ico");  //Falls kein Icon da: IDI_APPLICATION
    wc.hbrBackground = CreateSolidBrush(RGB(0, 0, 0));
    wc.lpszClassName = szMainname;
    wc.lpszMenuName  = NULL;
    
    RegisterClass(&wc);
    
    hWnd = CreateWindow(szMainname,
                        szMainname,
                        WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
                        GetSystemMetrics(SM_CXSCREEN) / 2 - iWindowX / 2,
                        GetSystemMetrics(SM_CYSCREEN) / 2 - iWindowY / 2,
                        iWindowX,
                        iWindowY,
                        NULL,
                        NULL,
                        hInstance,
                        NULL);
                        
    ShowWindow(hWnd, iCmdShow);
    UpdateWindow(hWnd);
    
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    
    return msg.wParam;
}

Viel Spaß noch...;)
 
Du verwendest LPCWSTR!! Das heisst Unicode, deshalb musst du statt const char LPCWSTR schreiben
Damit müsste es gehen, da du keinen Cast von const char zu LPCWSTR machen kannst
 

Neue Beiträge

Zurück