pradeepvarma
asked on
Paint the MDI Form with the desktop using PaintDesktop API in VB6
Hello,
I am using the following code to paint a normal form and it works.
PaintDesktop Me.hdc
In the standard module i have the declaration for PaintDesktop
Public Declare Function PaintDesktop Lib "user32" (ByVal hdc As Long) As
Long
Now I am not able to get the Me.hdc for the MDI Form. So I used the
following additional API calls.
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Now in the MDI Form I use the code:
Dim lngLong As Long, hdc As Long
hdc = GetDC(GetDesktopWindow())
lngLong = PaintDesktop(hdc)
the result in lngLong is 1 but the MDIForm is not painted with the
desktop.
Please help.
Thanks,
Pradeep Varma
I am using the following code to paint a normal form and it works.
PaintDesktop Me.hdc
In the standard module i have the declaration for PaintDesktop
Public Declare Function PaintDesktop Lib "user32" (ByVal hdc As Long) As
Long
Now I am not able to get the Me.hdc for the MDI Form. So I used the
following additional API calls.
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Now in the MDI Form I use the code:
Dim lngLong As Long, hdc As Long
hdc = GetDC(GetDesktopWindow())
lngLong = PaintDesktop(hdc)
the result in lngLong is 1 but the MDIForm is not painted with the
desktop.
Please help.
Thanks,
Pradeep Varma
what you could do, is draw on a hidden picturebox, and then set the mdi form's picture object to the picture of the hidden picturebox
see this for more info:
http://www.vb-helper.com/howto_mdi_background_draw.html
ASKER
Hello Mark,
I appreciate your quick response in this regard.
I further researched the issue and found that using the SystemParametersInfo
API we can get the wallpaper that is used by the desktop. So I used the
following peice of code:
SystemParametersInfo 115, Len(strFileInfo), ByVal strFileInfo, 0
mdiMain.Picture = LoadPicture(strFileInfo)
It is setting the active desktop wall paper as the MDI form's background but
not the entire form. Still there is some area which has the default form
colour.
Has it got something to do with the size parameter of LoadPicture?
Please Suggest!!!
Thanks,
Pradeep.
I appreciate your quick response in this regard.
I further researched the issue and found that using the SystemParametersInfo
API we can get the wallpaper that is used by the desktop. So I used the
following peice of code:
SystemParametersInfo 115, Len(strFileInfo), ByVal strFileInfo, 0
mdiMain.Picture = LoadPicture(strFileInfo)
It is setting the active desktop wall paper as the MDI form's background but
not the entire form. Still there is some area which has the default form
colour.
Has it got something to do with the size parameter of LoadPicture?
Please Suggest!!!
Thanks,
Pradeep.
ASKER
Hello Mark,
I think it is an issue related to the screen resolution.
I am attempting to see that the MDIForm displays picture in the same irrespective of the screen resolution chosen.
Any Ideas???
Thanks,
Pradeep
I think it is an issue related to the screen resolution.
I am attempting to see that the MDIForm displays picture in the same irrespective of the screen resolution chosen.
Any Ideas???
Thanks,
Pradeep
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Mark,
I tried your solution and it is working. Thanks for your efforts.
I would like to ask you one question. It is:
As i mentioned in my previous note, I could successfully get the desktop
wall paper and set it to the MDI Form using the LoadPicture. It is working
but for the window is not covering the entire MDI Form. If i set the screen
resolution to 600/800 everything looks good. But the screen resolution that
the users have is different.
I am just looking at dispalying the picture such that it covers the entire
MDI Form.
Any help would be highly appreciated.
I am using Visual Basic 6.0
The Code that I am using is:
SystemParametersInfo 115, Len(strFileInfo), ByVal strFileInfo, 0
mdiMain.Picture = LoadPicture(strFileInfo,Vb LPLarge))
Thanks and Regards,
Pradeep
I tried your solution and it is working. Thanks for your efforts.
I would like to ask you one question. It is:
As i mentioned in my previous note, I could successfully get the desktop
wall paper and set it to the MDI Form using the LoadPicture. It is working
but for the window is not covering the entire MDI Form. If i set the screen
resolution to 600/800 everything looks good. But the screen resolution that
the users have is different.
I am just looking at dispalying the picture such that it covers the entire
MDI Form.
Any help would be highly appreciated.
I am using Visual Basic 6.0
The Code that I am using is:
SystemParametersInfo 115, Len(strFileInfo), ByVal strFileInfo, 0
mdiMain.Picture = LoadPicture(strFileInfo,Vb
Thanks and Regards,
Pradeep
ok, try this:
put an picture control on your form,
and an image control in it
(leave the names default)
then use this code:
Private Sub MDIForm_Resize()
Picture1.BorderStyle = 0
Image1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
Picture1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
Image1.Stretch = True
Image1.Picture = LoadPicture("your picture here")
Picture1.AutoRedraw = True
Picture1.PaintPicture Image1.Picture, 0, 0, Me.ScaleWidth, Me.ScaleHeight
Me.Picture = Picture1.Image
Picture1.Visible = False
End Sub
ASKER
Fantastic,
Thanks Mark,
Now I uderstand that we cannot do this without placing controls like Picture box and Image. I was trying to see if i can make the picture set to picture property of the MDIForm expand to the full size.
I understood both of your methods, but the first one seems to be better. So I will go ahead and Implement it.
Thanks once again Mark!!
Regards,
Pradeep
Thanks Mark,
Now I uderstand that we cannot do this without placing controls like Picture box and Image. I was trying to see if i can make the picture set to picture property of the MDIForm expand to the full size.
I understood both of your methods, but the first one seems to be better. So I will go ahead and Implement it.
Thanks once again Mark!!
Regards,
Pradeep
thanks for the points, and happy coding!
the first method is indeed somewhat better,
but it gives a somewhat different output:
the first paints the desktop on the form that would be visible when the form is "see- trough"
so if you have a small form, only the piece of the desktop underneath is visible
the second loads the picture, and stretches it so it fits exactly on the form
ASKER
Thanks for the suggestions.
I am in the process of desgining an MDI application and using MDI Form. I intend to provide this feature only for the MDI form. So, No issues.
Thanks,
Pradeep
I am in the process of desgining an MDI application and using MDI Form. I intend to provide this feature only for the MDI form. So, No issues.
Thanks,
Pradeep
ASKER
I used the following code which worked in the form click for a normal form.
Dim hdc as long
hdc=GetDC(Me.Hwnd)
PaintDesktop hdc
The same code does not work in an MDiForm click.
Thanks,
Pradeep Varma