Chakky
Member of Honour
Hi HaBo,
ich versuche mich gerade an der WinApi unter C++.
Nachdem ich gestern in ein paar Stunden arbeit einen Textausgeben konnte und eine Messagebox per Mausklick, würde ich gerne jetzt die aktuellen Mauskoordinaten ausgeben. Sprich wo befinden sich mein Mauszeiger im Fenster.
Ich hab einige Tutorials gestern Nacht gefunden wo Dreiecke, Vierecke und so gezeichnet wird mit hilfe von Mauskoordinaten, es wird aber nirgendswo genau die Position ausgeben.
Ich hab das Problem das die Daten als Integer vorliegen aber ich sie nicht als Text ausgegeben bekomme. Mit casten von int auf char wie in der Konsole geht leider nicht.
Könnte mir jemand einen denk Anstoß geben?
Ich hab es wiefolgt versucht
Leider Funktioniert es nicht, deswegen auch im vollständigen Programm auskommentiert. Das Programm wird von VisualStudio wie folgt beendet:
"Microsoft Visual Studio C Runtime Library hat einen schwerwiegenden Fehler in Mau.exe gefunden"
Meine Umgebungsdaten:
Windows 7 Home 64bit,
Visual Studio 2010 Premium
Compiler Zeichensatz: Mulitbyte
Danke!
//Update: Es gab gerade in der chatbox den Hinweis über ein Extra Konsolenfenster das auszugeben, das will ich vermeiden. Ich will diesen zusammengeschusterten Code als Grundlage nehmen für ein SDK einer Hardware und die erfordert die WinApi und keine weitere Consolen ausgabe....
ich versuche mich gerade an der WinApi unter C++.
Nachdem ich gestern in ein paar Stunden arbeit einen Textausgeben konnte und eine Messagebox per Mausklick, würde ich gerne jetzt die aktuellen Mauskoordinaten ausgeben. Sprich wo befinden sich mein Mauszeiger im Fenster.
Ich hab einige Tutorials gestern Nacht gefunden wo Dreiecke, Vierecke und so gezeichnet wird mit hilfe von Mauskoordinaten, es wird aber nirgendswo genau die Position ausgeben.
Ich hab das Problem das die Daten als Integer vorliegen aber ich sie nicht als Text ausgegeben bekomme. Mit casten von int auf char wie in der Konsole geht leider nicht.
Könnte mir jemand einen denk Anstoß geben?
Ich hab es wiefolgt versucht
Code:
case WM_MOUSEMOVE:
GetCursorPos (&pt);
x=pt.x;
y=pt.y;
hDC = BeginPaint(hWnd,&ps);
sprintf_s(szBuffer, TEXT("X:%i Y:%i"),x,y);
EndPaint(hWnd,&ps);
InvalidateRect;
return 0;
Leider Funktioniert es nicht, deswegen auch im vollständigen Programm auskommentiert. Das Programm wird von VisualStudio wie folgt beendet:
"Microsoft Visual Studio C Runtime Library hat einen schwerwiegenden Fehler in Mau.exe gefunden"
Code:
#define STRICT
#include <windows.h>
#include <string>
#include <stdio.h>
#include <string.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
const char szAppName[] = "Textausgabe im Anwendungsbereich";
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MSG msg;
HWND hWnd;
WNDCLASS wc;
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 = szAppName;
wc.lpszMenuName = NULL;
RegisterClass(&wc);
hWnd = CreateWindow( szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static POINT pt={0}; //pointer initalisieren und statisch machen
static int x,y;
//char posi[];s
char szBuffer[10];
switch(message)
{
case WM_PAINT:
PAINTSTRUCT ps;
HDC hDC;
hDC = BeginPaint(hWnd, &ps);
TextOutA(hDC,50,50, "Blablabla", 10);
EndPaint(hWnd, &ps);
return 0;
case WM_LBUTTONDOWN:
GetCursorPos (&pt);
x=pt.x;
y=pt.y;
MessageBox(NULL, "Test",NULL, NULL); //test für button down
//xw=x;
//yw=y;
//ScreenToClient(hWnd, &pt); // screen coords to client coords
InvalidateRect(hWnd, NULL, FALSE);
return 0;
case WM_MOUSEMOVE:
GetCursorPos (&pt);
x=pt.x;
y=pt.y;
hDC = BeginPaint(hWnd,&ps);
sprintf_s(szBuffer, TEXT("X:%i Y:%i"),x,y);
EndPaint(hWnd,&ps);
InvalidateRect;
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
Meine Umgebungsdaten:
Windows 7 Home 64bit,
Visual Studio 2010 Premium
Compiler Zeichensatz: Mulitbyte
Danke!
//Update: Es gab gerade in der chatbox den Hinweis über ein Extra Konsolenfenster das auszugeben, das will ich vermeiden. Ich will diesen zusammengeschusterten Code als Grundlage nehmen für ein SDK einer Hardware und die erfordert die WinApi und keine weitere Consolen ausgabe....
Zuletzt bearbeitet: