Bonjour,
Je suis sous VC++.
J'ai créé une dialogBox avec des champs à remplir.
Je voudrais qu'en cliquant sur OK, un champs soit mis dans le presse papier.
J'ai parcouru des bouquins, j'ai vu des exmples avec des fenêtres. Toujours est-il que moi j'ai tjs:
error C2440: '=' : impossible de convertir de 'void *' en 'PTSTR'
Pour:
pText = malloc ((lstrlen (szlogin) + 1) * sizeof (TCHAR)) ;
Voici mon code:
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
#define CF_TCHAR CF_TEXT
TCHAR szlogin[] = TEXT ("Mettre le login") ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hDlg;
MSG msg ;
hDlg=CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)WndProc);
ShowWindow(hDlg,iCmdShow);
while(GetMessage(&msg,hDlg,0,0)==TRUE)
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return 0;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{ int Select;
static PTSTR pText ;
BOOL bEnable ;
HGLOBAL hGlobal ;
HDC hdc ;
PTSTR pGlobal ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message)
{
case WM_CREATE:
free (pText) ;
pText = NULL ;
pText = malloc ((lstrlen (szlogin) + 1) * sizeof (TCHAR)) ; //PREMIERE ERREUR
lstrcpy (pText, szlogin) ;
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
hGlobal = GlobalAlloc (GHND | GMEM_SHARE,
(lstrlen (pText) + 1) * sizeof (TCHAR)) ; //DEUXIEME ERREUR
pGlobal = GlobalLock (hGlobal) ;
lstrcpy (pGlobal, pText) ;
GlobalUnlock (hGlobal) ;
OpenClipboard (hwnd) ;
EmptyClipboard () ;
SetClipboardData (CF_TCHAR, hGlobal) ;
CloseClipboard () ;
if (LOWORD (wParam) == IDOK)
return 0 ;
return TRUE;
case IDCANCEL:
if (pText)
free (pText) ;
EndDialog(hwnd,Select);
PostQuitMessage(0);
return TRUE;
}
default:
return FALSE;
}
}
Ca fait plus d'une journée que je suis dessus. Quand c'est une fenêtre ça marche bien... je comprends rien.
Merci de votre aide.