|
|
I've created a pipe. I wish to read from the pipe only when data is available. What should I use. Can I use an Overlap Structure? Or, maybe a ComWaitEvent? What is generally done when reading pipes. I don't want to create a thread which constantly reads a pipe regradless of the data available. Thanks.
|
|
|
|
|
Yes, you can use overlapped IO, or overlapped IO completion ports, or loop on a sync read in a separate thread that will block while there is no data.
Regardless of the method, you are likely going to want to create thread(s) to read from the pipe if you don't want your main thread to block.
The most robust solution is to use IOCP. IOCP can be used to service overlapped requests for any handle returned by CreateFile or WSASocket/socket.
...cmk
Save the whales - collect the whole set
|
|
|
|
|
Hi every
I want to change the titlebar of Dialog (Win) to same as the MAC (Aqua). Any one can help me ?
Thanks very much.
|
|
|
|
|
Handle WM_NCPAINT to change appearance. Then perform hittest to determine what elements of new title bar are clicked and ensure they respond the way you need them to.
|
|
|
|
|
Can anybody tell me a site that explains mshtml interface(IHtmlTxtRange,IHtmlBodyElement). THanx
lokesh
|
|
|
|
|
First step should always be MSDN
IHtmlTxtRange
IHtmlBodyElement
If you need help in using these from within C++ I'd be happy to help
Hope this helps,
Andy
|
|
|
|
|
Thank you Andy, Iam virtually new to vc++ . I got a DHTMLED sample from msdn and wanted to set background sound using IHTMLBGsound and i tried but could't get it.
lokesh
|
|
|
|
|
Hi,
Are the HTML pages yours (or public sites)?
If they are yours then the easiest thing to do is the following:
In your pages include the <bgsound> tag (with the src attr empty) and an ID, e.g.
<html>
...
<bgsound src='' id='idSound1'>
...
</html>
Then in your OnDocumentComplete event in VC++ you can run the following code:
MSHTML::IHTMLDocument2Ptr spDoc(m_ctlWeb1.GetDocument());
if (spDoc)
{
MSHTML::IHTMLDocument3Ptr spDoc3 = spDoc;
if (spDoc3)
{
MSHTML::IHTMLElementPtr spElem2 = spDoc3->getElementById(_bstr_t("idSound1"));
if (spElem2)
{
MSHTML::IHTMLBGsoundPtr spBG = spElem2;
if (spBG)
{
CString strURL = _T("http://server/eg/alert.wav");
spBG->put_src(_bstr_t(strURL));
}
}
}
}
If they are public sites and you are trying to inject a <bgsound> into them - this will be a little bit more work...
Firstly, we need to get DOM to create us an <bgsound> element, and then insert it into the document. As before, we do this in the OnDocumentComplete event...
MSHTML::IHTMLElementPtr spElem = spDoc->createElement(_T("BGSOUND"));
if (spElem)
{
MSHTML::IHTMLBGsoundPtr spBG = spElem;
if (spBG)
{
CString strURL = _T("http://server/eg/alert.wav");
spBG->put_src((bstr_t)strURL);
MSHTML::IHTMLDOMNodePtr spBody = spDoc->body;
MSHTML::IHTMLDOMNodePtr spNode2Add = spBG;
if (spBody != NULL && spNode2Add != NULL)
{
spBody->appendChild(spNode2Add);
}
}
}
And that's it
Hope this helps,
Andy
|
|
|
|
|
Thank you Andy,but My view is not derived from CHTMLView my view is derived from CView,IOleInPlaceFrame and IOleCommandTarget and iam using my own html pages.I think IHTMLBGsound is not supported in it ( I tried to paste it using pasteHTML).
lokesh
|
|
|
|
|
Hi again,
Neither was my test app. I created a test app and inserted the WebBrowser ActiveX Control into the dialog. Then used the Event sinking (through class wizard) to handle the DocumentComplete event, e.g.
BEGIN_EVENTSINK_MAP(CWebTest1Dlg, CDialog)
ON_EVENT(CWebTest1Dlg, IDC_EXPLORER1, 259 , OnDocumentCompleteExplorer1, VTS_DISPATCH VTS_PVARIANT)
END_EVENTSINK_MAP()
The BGSOUND element was available from IE3, and available in script from IE4 so I can't see that it's not supported. How are you using the Web Control in your app?
Cheers,
Andy
|
|
|
|
|
I got a DHTMLED sample from msdn (just enter DHTMLED in search).Run the exe and You will find a folder sample/Edit/. I want IhtmlBGsound implemented in it. Thank you for following it up.
lokesh
|
|
|
|
|
I got a DHTMLED sample from msdn (just enter DHTMLED in search in MSDN).Run the exe and You will find a folder sample/Edit/. I want IhtmlBGsound implemented in it. Thank you for following it up.
lokesh
|
|
|
|
|
Hi lokesh,
I've had no luck finding this sample project. Do you have a link to it?
I tried online MSDN as well as the MSDN Library Disks (Jan 2003)
Cheers,
Andy
|
|
|
|
|
|
http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/downloads/samples/internet/browser/editcntrl/default.asp
lokesh
|
|
|
|
|
Hi lokesh,
Right I found the project you are on about. Just to clarify - it was the CEdit project was it not?
Anyway I've had a look and have got it to insert the BGSOUND element.
This project must have been written way way back and is a very verbose way of doing things. Anyway I digress.
This is what I did:
Firstly, we what to inject the element on the Document Complete event but because this is an old application we have to do it the old way. Events from the HTMLDOMDocument are handled by the CImpIDispatch class in DOCEVENT.cpp, we can tell this because in the crtview.cpp you see the following line:
hr = m_pConnectionPoint->Advise( m_pDocEvents, &m_dwConnectCookie );
So we are setting the object for the DOMDocument to call us back on.
Then in the CImpIDispatch class, we need to look for the ::Invoke method, this is what will get called whenever any events take place - dispIdMember parameter will hold what event it actually is (see MSDN for all the events)
The event we are interested in is: DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE
readyState is a property of the document that tells you what the state of it is - we want to wait for it to be "complete"
So here is the code I used in the ::Invoke method:
USES_CONVERSION;
if ( dispIdMember == DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE )
{
MSHTML::IHTMLDocument2Ptr spDoc(m_pView->m_pSite->GetObjectUnknown());
if (spDoc)
{
CString strState = OLE2T(spDoc->readyState);
if (strState == _T("complete"))
{
MSHTML::IHTMLElementPtr spElem = spDoc->createElement(_T("BGSOUND"));
if (spElem)
{
MSHTML::IHTMLBGsoundPtr spBG = spElem;
if (spBG)
{
CString strURL = _T("http://www.htmlcodetutorial.com/sounds/hazy_shade_of_winter.mid");
spBG->put_src(T2OLE(strURL));
MSHTML::IHTMLDOMNodePtr spBody = spDoc->body;
MSHTML::IHTMLDOMNodePtr spNode2Add = spBG;
spBody->appendChild(spNode2Add);
}
}
}
}
}
Now you may notice that above I'm using the smart pointer implementation for COM calling - I did start doing in the traditional way but I got so bored with doing QueryInterface all the time. So add the following to the top of the cpp file:
#import "C:\Windows\system32\mshtml.tlb" no_auto_exclude
Actually there is another reason - the mshtml.h file that is already included in the file points to a version in your VC install directory - and this is woefully out of date (i.e. doesn't include the IHTMLDOMNode interface that we require)
Ok, no also don't forget to include:
#include <AFXPRIV.H>
In your stdafx.h as we are using the USES_CONVERSION macro to help us with string conversion.
I'm going to end it now, rather than babble on and on. I hope I've got the right end of the stick of what you wanted to achieve ?? Any questions just ask
Andy
|
|
|
|
|
Super!Super! U GOT IT RIGHT MAN...
ITS WORKING....
THANKYOU VERY MUCH.
Iam just new to vc++ especially to com. I would be pleased if u guide me or teach me this thing from basics( Even some material would do).My email id is
itslokeshk@yahoo.co.in and would be pleased to yours too. Thank you very much...once again.
bye..
lokesh
|
|
|
|
|
Hi world!
I'm looking for methods to share an object (C++) between several applications?
I use VC6...
Example:
Application 1 write in my_sharing_object object.
Application 2 read any attributs from my_sharing_object object (writed by the first application).
Any idea?
Thans in advance for your help.
Hello World!!!
from Raphaël
|
|
|
|
|
Hi,
I personally would implement a SINGLETON COM server.
Maybe overkill for what you want, but implement a compliant IDispatch interface, and now app 2, 3, or 4 can be VB or even Internet Explorer clients - much more sexy.
Hope this helps,
Andy
|
|
|
|
|
I have a toolbar button that I want to change dynamically to different solid blocks of colour. I can get a handle to the current image using
tbbi.dwMask = TBIF_IMAGE;
SendMessage(hTB,TB_GETBUTTONINFO,(WPARAM)TB_COLOUR,(LPARAM)&tbbi);
himl = (HIMAGELIST)SendMessage(hTB,TB_GETIMAGELIST,0,0L);
ImageList_GetImageInfo(himl,tbbi.iImage,&ii);
and I can replace the image and tell the toolbar to use the new one using
ImageList_Replace(himl,tbbi.iImage,hbm,NULL);
SendMessage(hTB,TB_CHANGEBITMAP,TB_COLOUR,MAKELPARAM(tbbi.iImage,0));
but in between how do I change the bitmap or create a new one? I've tried
hbm = (HBITMAP)CopyImage(ii.hbmImage,IMAGE_BITMAP,size.cx,size.cy,LR_COPYRETURNO);
selecting into a HDC, and using FillRectEx but it doesn't work. I'm using C and win32 (I don't know C++ or MFC).
Any help appreciated.
thanks
Dave Risley
|
|
|
|
|
I had include header file in stdafx.h and set precompiled headers is stdafx.h but when i compile my project it still error some variable not defined.
somebody can help me?
thanks
Nho'c Ti`
|
|
|
|
|
I think you need to supply more information. To start with: What compiler error occurred?
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
The Second EuroCPian Event will be in Brussels on the 4th of September
Can't manage to P/Invoke that Win32 API in .NET? Why not do interop the wiki way!
|
|
|
|
|
-- in stdafx.h file
#include "mylib.h"
-- in myfile.h file I use some variable and some define in mylib.h
ex : #define A 1
but when i compile it still error in myfile.h with message : A isn't defined
Nho'c Ti`
|
|
|
|
|
because in myfile.h you dont include stdafx.h
try including stdafx.h before you include your myfile.h
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|