|
|
Hi
I am trying to use Web browser control in win32 application in VS2005(not MFC). I have addded this control to the toolbox from COM component list. But I can not drag and drop this newly added control to the to the dialog window.
I am able to do and work with the web browser control in MFC application and it works fine there but I am unable to add this control to win32 application.
Please help me, how I can add web browser control to win32 application.
If it is not possible to drag and drop this control to win32 application, please directed me to any thread when I can find how to add this control programmatically to win32 application in VS.
I will appreciate you help and rate everybody who will try to help me.
Thank you.
|
|
|
|
|
Site—The object supplied by a container to a contained object through IOleObject::SetClientSite. Containers of an ActiveX object must supply a site before doing anything else. MSHTML gets much of its information about its geometry, activation, and ambient properties from its container site. MSHTML supplies a site for each ActiveX control it hosts.
Reusing MSHTML[^]
|
|
|
|
|
|
Is there a correct, documented way to get the parent folder given a full LPITEMIDLIST for a file system item.
For example: Assuming I have the itemlist that represents 'c\windows\system32', how can I get the itemlist that represents 'c\windows' ?
SHBindToParent() will give me an IShellPointer for the original folder but does not otherwise, in any obviousl way, help navigate the file system hierarchy.
Thanks for any clues.
|
|
|
|
|
There used to be an article in the MSDN called "Working with item ID lists", which does not appear to be in the current online MSDN. In it there was defined a sample function:
The following function takes a PIDL and changes it to its parent by removing the last item in the list.
BOOL GetParentID(LPITEMIDLIST pidl)
{
BOOL fRemoved = FALSE;
if (pidl == NULL)
return(FALSE);
if (pidl->mkid.cb)
{
LPITEMIDLIST pidlNext = pidl;
while (pidlNext)
{
pidl = pidlNext;
pidlNext = GetNextItemID(pidl);
}
pidl->mkid.cb = 0;
fRemoved = TRUE;
}
return fRemoved;
}
|
|
|
|
|
Thanks Roger,
I eventually realised that ILFindLastID is documented. As such one could reasonably infer the purpose is to walk back along the ITEMLIST.
|
|
|
|
|
Hi, I've migrated from old VC++6 to VC++2005. Back then I could apply WinXP look to my app's as described in "Add Windows XP Theme Style to your current projects" article by Jiang Hong.
When I try to do same in VS2005, nothing happens, no Win XP style look!
Does anyone know how to do this on VS2005?
Thanks!
|
|
|
|
|
why don't you ask in the forum at the bottom of the article you're refering instead ? the author would probably know the answer better than us.
|
|
|
|
|
josip cagalj wrote: Does anyone know how to do this on VS2005?
VS2K5 automatically adds a manifest now, whereas VC++ 6 didn't. To add the XP style manifest info, rather than add a custom resource, go to Project Properties > Configuration Properties > Manifest Tool > Input and Output > Additional Manifest Files and specify your XML manifest file there.
|
|
|
|
|
There are a lot of ways to make it work on VS2005 or 2008. This is mine:
1.- Add the InitCommonControls() call at the very beggining of your program.
2.- On the stdafx.h file, add this line: #include "commctrl.h"
On the properties of your project:
3.- On Linker/Manifest File make sure the generate manifest entry is set to "Yes"
4.- On Linker/Command Line add "comctl32.lib" (without the cuotes).
5.- On Manifest Tool/Input and Output, set the "Aditional Manifest File" to $(IntDir)\XPCommonControls.manifest
Finally create a new text file with this code and save it as "XPCommonControls.manifest" on the same folder than your .exe
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
<dependency>
<dependentassembly>
<assemblyidentity>
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"/>
</assemblyidentity></dependentassembly>
</dependency>
</assembly>
Wish you luck
rotter
|
|
|
|
|
I did as you told me, bur when building i get this error message:
Linking...<br />
Embedding manifest...<br />
.\Debug\XPCommonControls.manifest : general error c1010070: Failed to load and parse the manifest. The system cannot find the file specified.
When you said
rotter512 wrote: On Manifest Tool/Input and Output, set the "Aditional Manifest File" to $(IntDir)\XPCommonControls.manifest
did you mean I had to put file path instead of 'IntDir' like $(c:\..\..)\XPCommonControls.manifest, or just leave it as it is ($(IntDir)\XPCommonControls.manifest)?
Anyway in booth cases I get message "Failed to load and parse the manifest"
modified on Thursday, December 13, 2007 7:41:38 AM
|
|
|
|
|
|
Hi,
I have written text to a device context using "dc.DrawText()" onto a transparent background. The text needs to move, but it leaves the old text on the DC, which just causes a long black smudge. As I mentioned, the background is transparent, so I cant just blit the background again.
I have noticed that calling ShowWindow(SW_HIDE); then re-showing it clears the text, however I make the text move from within the OnPaint method, which obviously causes problems if I hide/show it constantly.
Does anyone have any ideas as to how I can remove the text?
Thanks.
MS.
|
|
|
|
|
Mr Simple wrote: however I make the text move from within the OnPaint method
Is it a good idea?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Well, by 'move' i mean more 'repostitioned'. The location of the text is based upon a number of variables, the window itself is a large mishaped window.
How do you think I should be drawing the text?
|
|
|
|
|
Well. I don't know exactly your needs. Anyway, I think the current text position has to be assigned outside the OnPaint method (for instance inside a timer) and then you have to invalidate both the latest text rectangle and the current text one and, finally, you have to call UpdateWindow to let OnPaint doing its job.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
How do you suggest I set the text from outside the paint method? Another reason I chose to use OnPaint is that I dont know how to do it without having the DC variable to use the .DrawText with!
@Nelek, I have tried both Invalidate (entire), InvalidateRect (text in rectangles), and InvalidateRgn (dc region) all to no avail!
Thank you for your time.
MS
|
|
|
|
|
Of course drawing should happen inside OnPaint method.
Now suppose ('cause I don't know yet what are you trying to do...) you're doing a kind of animation of your text and, say rcCur is the current text rectangle.
Inside the timer procedure you can:
(1) Compute next position text rectangle rcNext .
(2) Invalidate both rcCur , rcNext rectangles.
(3) Set rcCur = rcNext .
(4) call UpdateWindow .
Point (4) makes OnPaint being called and your text position updated.
Hope that helps.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Also, keep in mind - you don't need to preserve a DC between WM_PAINT messages.
The DC does not remember where you draw text - that's up to you to store.
A DC is more like a canvas - when you paint on it, that's it. If you want
to "move" something you've painted, you need to paint over the old item and
repaint the item at it's new location.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi,
I am not (knowingly/intentionally) preserving the DC. I am able to get this to work over sections of the DC are not transparent (the redrawn image covers the old text) but I am unable to draw over the transparent old text because I dont know what lies underneath.
CPallini - I hope I am not coming across as stupid, but I still cannot get your suggestion to work. Please correct my thinking if it is wrong (see below);
Thank you for your time.
MS.
<br />
CRect rTextMain;
<br />
CRect rMoveTo;<br />
InvalidateRect(&rTextMain);
InvalidateRect(&rMoveTo);<br />
<br />
rMoveTo.top = val1; rMoveTo.left.......<br />
<br />
rTextMain = rMoveTo;<br />
UpdateWindow();
<br />
CFont newFont;<br />
newFont.CreateFont(15, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, _T("MS Sans Serif"));<br />
CFont *oldFont = dc.SelectObject(&newFont);<br />
<br />
CString sWords = "test";<br />
dc.DrawText(sWords, &rTextMain, DT_TOP | DT_LEFT)
|
|
|
|
|
You've used rMoveTo before it's initialized. You shouldn't need
the second (rMoveTo) rect.
This should be enough:
CRect rTextMain;
InvalidateRect(&rTextMain);
rTextMain.top = val1; rTextMain.left.......
UpdateWindow();
CFont newFont;
newFont.CreateFont(15, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, _T("MS Sans Serif"));
CFont *oldFont = dc.SelectObject(&newFont);
CString sWords = "test";
dc.DrawText(sWords, &rTextMain, DT_TOP | DT_LEFT)
The WM_ERASEBKGND should take care of the invalidated rect.
Then the WM_PAINT handler should draw the text at the new location.
I don't see anything related to transparency or images.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi,
Unfortunately I could not get this to work either. Do you have any other ideas? This is being run on Win CE by the way.
I didn't put the transparency stuff in the last post, but it comes just before the text is printed. A global region is made in the constructor with bits missing (missing bits are therefore transparent). The images are loaded into a CBitmap array. In OnPaint;
To display the BMP;
Create CDC from DC
CDC select object (global/main region)
CDC select object (bitmap)
TransparentBlt to DC;
TransparentBlt(dc.GetSafeHdc(), 0, 0, floatingBMP.bmWidth, floatingBMP.bmHeight, myCDC->GetSafeHdc(), 0, 0, floatingBMP.bmWidth, floatingBMP.bmHeight, 0x00ff00);// Transparency = lime green, altho this doesnt matter as the region has already been created to take this into account;
After this is the DrawText code which has already been show.
Any ideas?
Thanks
MS.
|
|
|
|
|
Without knowing what's not working...
Mr Simple wrote: Create CDC from DC
How are you doing this? It should be a memory DC created with CDC::CreateCompatibleDC().
Mr Simple wrote: CDC select object (global/main region)
What's the purpose of the region - for clipping? Why select it into the source DC?
That looks suspicious...I would try commenting the region stuff out and see what happens.
Are you handling WM_ERASEBKGND? If so, what are you doing there?
What do you want to see and what is happening that is wrong?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi,
I am using CreateCompatibleDC;
<br />
CPaintDC dc(this);
CDC *floatCDC = new CDC;<br />
floatCDC->CreateCompatibleDC(&dc);
I have removed the region code, and can report having it there made no difference to my application. I had read about it in a 'funky shaped window' article and assumed I needed it, obviously I was wrong
I am not handling WM_ERASEBKGND.
What I want to see is text moving on a transparent background. I have manged this to a degree, however when the text is moved, the old text remains underneath the new text. I think part of the problem is that I am drawing over the old text with a transparent image, so the old text is still visible.
Any other ideas?
Thank you for your time!
MS
|
|
|
|
|