Мне нужно из одного приложения в другое, через буфер обмена, передать картинку...
По идее все должно работать...но если я даже к примеру в paint пытаюсь вставить изображение из буфера он пишет что это не возможно хотя что-то там есть))
И мое второе приложение находит в буфере файлы необходимого типа но рисовать не спешит...
Подскажите что нить...плиз...
Передающее приложение:
Код:
HINSTANCE hInst;
HANDLE hBitmap,hOldBitmap;
HDC hdcMem;
BITMAP bm;
char szClassName[] = "Klient";
HWND hwnd,hNext;
int flag=0;
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam, LPARAM lParam){
switch(msg)
{
static OPENFILENAME ofn;
static STARTUPINFO si;
static PROCESS_INFORMATION pi;
static SECURITY_ATTRIBUTES sa;
static HANDLE hRead;
static char path[100];
////////////////////////////////////////////////////////////////////////////////
case WM_CREATE:
{
hBitmap =(HBITMAP)LoadImage(NULL,"D:\\1.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
hNext = SetClipboardViewer(hwnd);
};break;
////////////////////////////////////////////////////////////////////////////////
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc,hCompatibleDC;
BITMAP Bitmap;
hdc = BeginPaint(hwnd, &ps);
if(flag)
{
hBitmap =(HBITMAP)LoadImage(NULL,"D:\\1.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
GetObject(hBitmap,sizeof(BITMAP),&Bitmap);
hCompatibleDC = CreateCompatibleDC(hdc);
hOldBitmap = SelectObject(hCompatibleDC,hBitmap);
StretchBlt(hdc,0,0,300,300,
hCompatibleDC,0,0,Bitmap.bmWidth,
Bitmap.bmHeight,SRCCOPY);
SelectObject(hCompatibleDC,hOldBitmap);
DeleteObject(hBitmap);
DeleteDC(hCompatibleDC);
}
EndPaint(hwnd,&ps);
};break;
////////////////////////////////////////////////////////////////////////////////
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case ID_RUN:
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = path;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(path);
ofn.lpstrTitle = "Открыть";
ofn.lpstrFilter = "Программы\0*.exe\0Все типы файлов\0*.*\0";
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(GetOpenFileName(&ofn))
{
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.hStdInput = hRead;
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
si.dwFlags = STARTF_USESTDHANDLES;
if(!CreateProcess(path,"proc_server", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
MessageBox(hwnd,"При создании дочернего процесса призошла ошибка.","Внимание!",MB_OK);
CloseHandle(hRead);
}
break;
case ID_SHOW:
{
flag=1;
InvalidateRect(hwnd,NULL,TRUE);
}
break;
/////////////////////////////////////////////////////////////////////////////////////
case ID_HIDE:
{
flag=0;
InvalidateRect(hwnd,NULL,TRUE);
}
break;
/////////////////////////////////////////////////////////////////////////////////////
case ID_COPY:
{
OpenClipboard(hwnd);
EmptyClipboard();
SetClipboardData(CF_BITMAP,hBitmap);
}
break;
case ID_UNLOAD:
SendMessage(FindWindow("Server",NULL),WM_DESTROY,0,0);
break;
///////////////////////////////////////////////////////////////////////////////
case WM_DRAWCLIPBOARD:
{
if(hNext)
SendMessage(hNext,msg, wParam, lParam);
}
break;
case WM_CHANGECBCHAIN:
{
if ((HWND) wParam == hNext)
hNext= (HWND) lParam;
else
{
if (hNext!= NULL)
SendMessage(hNext,msg,wParam,lParam);
}
}
break;
///////////////////////////////////////////////////////////////////////////////
case ID_EXIT:
SendMessage(FindWindow("Server",NULL),WM_DESTROY,0,0);
SendMessage(hwnd,WM_DESTROY,0,0);
break;
}
};break;
////////////////////////////////////////////////////////////////////////////////
case WM_DESTROY:
{
ChangeClipboardChain(hwnd,hNext);
CloseClipboard();
PostQuitMessage(0);
};break;
default:
return(DefWindowProc(hwnd,msg,wParam,lParam));
}
}