We help IT Professionals succeed at work.


coop050498 asked
Medium Priority
Last Modified: 2006-11-17

(also posted to comp.lang.basic.visual.misc)

I'm having trouble getting ICONWRKS to work properly under VB4.0 (16-bit) either with Win3.1 or Win95.  I know that VB 4.0 has some advanced graphics capabilities over VB 3.0 (which is where ICONWRKS came from) but I'm using ICONWRKS to understand API programming as described in Appleman's "Visual Basic Programmer's Guide to the Windows 3.1 API.

A friend of mine still has VB3.0 and ICONWRKS works fine both under Win3.1 and Win95.

I've noticed that after fixing a few initial VB3.0 -to- VB4.0 style bugs
that the programs runs enough to allow me to edit in the pic_edit
picture box (that's the one the user sees) but when the pic_edit_mouse_up event occurs, the copy of the current icon over in the status area doesn't update.  This copy of the icon is what gets saved to a file using the SavePicture statement.  My problem is that none of my edits make it to the file (whatever.ICO)

I've traced through the program after pic_edit_mouse_up and have come to a critical point with the update_icon subroutine. First I noticed that the source code used integers for the GetBitmapBits
function return when the (Win 3.1) API calls for long.  Also they pass numeric constants without enforcing integer vs. long but I guess VB takes care of that.

They copy bits from the pic_image and pic_mask to pic_icons(currentIcon) by BitBlt-ing the monochrome mask bits through a compatible memory device context (monohdc) and GetBitmapBits & GlobalLock to copy them to pic_icon(currentIcon).picture_base_address+12.  The image bits are copied by GetBitmapBits from pic_image.image to
pic_icons(currentIcon).picture + 12 + 128.  Then they force a paint event on pic_icons(currentIcon).  This all works under 3.0 (even with improper API function return types) but not for my case.

Since the problem moves with VB version and is independent of Win3.1 vs. Win95 could there have been a change in internal graphics controls' memory layout from 3.0 to 4.0?  Is the internal structure of .picture and .image detailed anywhere?

Did I miss a release notes file?  Should I be taking a different diagnosis track?

I have pro edition.  I have not looked into the CDK.

Thanks for any and all help,

Jeff Cooper
Digital Equipment Corp
Networks Engineering
Watch Question

This is not much of a solution, only a gesture and comforting. I'm stuck with exactly the same problem, started with trying Iconworks to work in VB4.
As far as I dug in it is a matter of changing one or to DLL's.
It is the GetBitmapBits or GlobalLock where the original code tumbles and puts the machine into a Sodom and Gamorra like still.
I think you can erase the 200 points upto 1000, because to my opinion nobody seems to know.


Edited text of question


Adjusted points to 295

IconWrks was originally designed for VB 3.0...was it not?

It is reasonable to assume that it might now be compatible with
VB 4.0.  I know that Micrsoft changed its Variant record type
dramtically between the releases, therefore DLLs that relied on
the old format no longer work with the new format.  It is
reasonable to expect that MS made other substantial changes.
And like MS, they don't publicize these changes too loudly...
you're forced to find them out the hard way, then search for
the docs later.

I'd e-mail the makers of IconWrks and see what kind of solutions
they have for you and see if they have a VB 4.0 compatible
version you can get a hold of.


I don't believe variant datatypes are involved.


Adjusted points to 355
I think that the problem has to do with string format changed between VB4 and VB3. Strings stored in memory occupy two bytes per character in VB4 whereas they occupied one byte in VB3. Try changing string declarations in the structures to byte declarations.

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts


I DO NOT ACCEPT THIS ANSWER.  Seems to me nobody who really understands VB beyond a surface level is attempting to answer this question.  I'm not getting a chance to grade this answer but I grade it an F.

Sorry to hear that. I just saw your question and got to think about my trouble declaring structures for API calls until I noticed that.
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.


Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.