Is there any way to use IupBackgroundBox with CD?
I am currently using an IupCanvas and drawing into it successfully using CD. I
would like to parent other controls onto this surface (such as IupMultitext,
IupButton), but retain the ability to draw using CD since I have a lot of code
written using that.
So if there was a way to copy the result from CD into IupBackgroundBox using
IupDraw that would seem to do the job, but I can't quite seem to get it to
work. The only way I could figure out to create a cdCanvas was to use
CD_NATIVEWINDOW with a new Win32 HWND. The graphics are drawn into the HWND but
then I can't get it copied out there into the BackgroundBox.
Here's what I have:
void win_create()
{
win->notes_graph= IupBackgroundBox();
IupSetCallback(win->notes_graph, "MAP_CB", (Icallback)graph_mapcb);
IupSetCallback(win->notes_graph, "UNMAP_CB", (Icallback)graph_unmapcb);
IupSetCallback(win->notes_graph, "RESIZE_CB", (Icallback)graph_resize);
IupSetCallback(win->notes_graph, "BUTTON_CB", (Icallback)graph_button);
IupSetCallback(win->notes_graph, "MOTION_CB", (Icallback)graph_motion);
IupSetCallback(win->notes_graph, "KEYPRESS_CB", (Icallback)graph_keypress);
IupSetCallback(win->notes_graph, "WHEEL_CB", (Icallback)graph_wheel);
IupSetCallback(win->notes_graph, "ACTION",
(Icallback)graph_draw_backbuffer_to_container);
}
int graph_mapcb(_HANDLE_PTR self)
{
tWIN *win = (tWIN *)IupGetAttribute(self, "WIND");
const wchar_t CLASS_NAME[] = L"BACKBUFFER";
WNDCLASS wc = { 0 };
wc.lpfnWndProc = DefWindowProc;
wc.hInstance = 0;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows",// Window text
WS_OVERLAPPEDWINDOW,// Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, win->screenWidth, win->screenHeight,
NULL, // Parent window
NULL, // Menu
0, // Instance handle
NULL// Additional application data
);
win->notes_cdGraph = cdCreateCanvas(CD_NATIVEWINDOW, hwnd);
return IUP_DEFAULT;
}
// I had to provide this signature for some reason even though I include cdim.h
void cdCanvasGetImImage(cdCanvas* canvas, imImage* image, int x, int y);
int graph_draw_backbuffer_to_container(_HANDLE_PTR self)
{
tWIN* win = (tWIN*)IupGetAttribute(self, "WIND");
cdCanvasGetImImage(win->cdGraph, win->backbuffer, 0, 0);
Ihandle *iupImage = IupImageFromImImage(win->backbuffer);
IupSetHandle("BACKBUFFER", iupImage);
IupDrawImage(win->notes_graph, "BACKBUFFER", 0, 0, win->graphWidth,
win->graphHeight);
IupSetHandle("BACKBUFFER", NULL);
IupDestroy(iupImage);
}
___
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users