![]() |
【转帖】i see only background in win32 application
i see only background in win32 application
i see only background in win32 application i'm trying to display a drawing, in a vc++ 2003 windows 32 application, without mfc. what i can get is only the background of the drawing, nothing else appears. in wm_paint message, i just call this piece of code, derived from samples. maybe i'm missing something. i've tryed even the exgsopenglvectorizedevice, but does'nt display anything. thanks for any answer. ciao!!! stefano gemma --------------------- void vectorize(oddbdatabaseptr &pdb,hwnd hwnd) { // drawing has already been loaded to pdb // create the vectorization context. odgicontextfordbdatabaseptr pdwgcontext = odgicontextfordbdatabase::createobject(); // create the custom vectorization device odgsdeviceptr pdevice = exgsscreendevice<exgsgdivectorizedevice>::createob ject(); odrxdictionaryptr pproperties = pdevice->properties(); if(pproperties.get()) { pproperties->putat("windowhwnd", odrxvariantvalue((oduint32)hwnd)); if(pproperties->has("doublebufferenabled")) // check if property is supported { pproperties->putat("doublebufferenabled", odrxvariantvalue(true)); } } // set the database to be vectorized. pdwgcontext->setdatabase(pdb); // prepare the device to vectorization the active layout in this database. pdevice = oddbgsmanager::setupactivelayoutviews(pdevice, pdwgcontext); pdevice->setbackgroundcolor(odrgb(0,255,255)); rect rc; getclientrect(hwnd,&rc); // set the screen size for the generated geometry. odgsdcrect screenrect(odgsdcpoint(rc.left, rc.top), odgsdcpoint(rc.right,rc.bottom)); pdevice->onsize(screenrect); // initiate vectorization. pdevice->update(); } hi, 1.does odamfcapp shows the drawing ? if so: 2.could you please debug and check errors on gdi calls inside exgsscreendevice<exgsgdivectorizedevice>::update() to clarify the problem. quote: originally posted by dmitry a. novikov hi, 1.does odamfcapp shows the drawing ? if so: 2.could you please debug and check errors on gdi calls inside exgsscreendevice<exgsgdivectorizedevice>::update() to clarify the problem. odamfcapp works fine. the only strange thing i've seen is for lines width in pixel, that was 0. i say "was", because, after the upgrade to 1.11 i can't see even the background the program now raise an exception on this code: odstring slayout = pdb->findactivelayout(true); oddbobjectid layoutid = pdb->findlayoutnamed(slayout); oddblayoutptr playout = layoutid.safeopenobject(); // here it raise unhandled exception, access violation read of address 0 pdevice = oddbgsmanager::setupactivelayoutviews(pdevice, pdwgcontext); i can suppose that there's something wrong with layout or view. the disassembly show error in: mr.exe!odgsbasemodule::createview() row 75 + 0x9 thanks. stefano gemma quote: originally posted by stegemma odamfcapp works fine. // here it raise unhandled exception, access violation read of address 0 pdevice = oddbgsmanager::setupactivelayoutviews(pdevice, pdwgcontext); check a few posts ago with title "setupactivelayoutviews/setuplayoutviews" maybe that could help you... last edited by clisk; 14th june 2004 at 10:36 amfff">. reason: added link to posts hi, i figured out it. it seems to be a bug. to bypass it implement gslocalmodule and create device via its createdeviceobject() code: class gslocalmodule : public odgsbasemodule { public: void addref() {} void release() {} odsmartptr<odgsbasevectorizedevice> createdeviceobject() { return exgsscreendevice<exgsgdivectorizedevice>::createobject(); } odsmartptr<odgsviewimpl> createviewobject() { return odrefcountimpl<exgdivectorizeview, odgsviewimpl>::createobject(); } odsmartptr<odgsbasevectorizedevice> createbitmapdeviceobject() { //return exgsbitmapdevice<exgsgdivectorizedevice>::createobject(); return odsmartptr<odgsbasevectorizedevice>(); } odsmartptr<odgsviewimpl> createbitmapviewobject() { //return odrefcountimpl<exgdivectorizeview, odgsviewimpl>::createobject(); return odsmartptr<odgsviewimpl>(); } } localgsmodeule; // create the custom vectorization device odgsdeviceptr pdevice = localgsmodeule.createdeviceobject(); |
所有的时间均为北京时间。 现在的时间是 01:48 AM. |