|
Hello i have a problem with event sink. I need to contol a NewWindow when it pops-up (to change if its visible toolbar)
i'm not sure about pDispParams->rgvarg[1].pdispVal; parametr. SOmehow i dont have handle to the new window.
Please help...
Code for NEWWINDOW2 event:
HRESULT __stdcall DWebBrowserEventsImpl::Invoke(DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS __RPC_FAR *pDispParams,
VARIANT __RPC_FAR *pVarResult,
EXCEPINFO __RPC_FAR *pExcepInfo,
UINT __RPC_FAR *puArgErr)
{
if (dispIdMember == DISPID_NEWWINDOW2)
{
//event sink is working because i can get a test message every time a new window pops
//but somehow i cant control a new wondow ?
MessageBox(NULL,"TEST","TEST",NULL);
//////////////////////////////////////////////////////////// this part wont work ?
CComQIPtr< IWebBrowser2> Nwin= pDispParams->rgvarg[1].pdispVal;
Nwin->put_Visible(TRUE);
Nwin->put_MenuBar(TRUE);
Nwin->put_ToolBar(FALSE);
}
return NOERROR;
}
|
|
|
|
|
I am currently designing a 2D/3D interface package based on Direct3D, but need to include a DirectShow VMR9 window in the interface which will be diplaying video from a capture card or pre-recorded videos.
The problem is that I have a render loop that constantly updates and redraws the interface, which causes the embedded video to flash. Is there a way that I can tell part of a surface not to be redrawn, i.e. the surface behind the vid window? It is on top of a large fullscreen size surface which holds a background image. Else is there a simple way to place individual frames of a my video onto a Direct3D surface which can then be drawn on top of the backgroung image.
I'm fairly new to Direct3D and very new to DirectShow. Any help is appreciated.
Thanks,
Dustin
|
|
|
|
|
|
I have a static boolean :
static bool booleanValue= true;
in my stdafx.h file.
I assumed this variable would have one instance across my application. But this assumption is apparently wrong. Within different objects, this boolean has separate instances, thus voiding its use.
I.E.
------------------------------
Have a class:
#include "stdafx.h"
class Blah {
int stuff;
void doStuff() {
if (!booleanValue) {
stuff++;
}
}
};
Have another class"
#include "stdafx.h"
class AnotherClass {
int stuffedPeppers;
void intoTheAbyss() {
if (!booleanValue) {
stuffedPeppers++;
}
}
};
------------------------------
The addresses for the same variable are different (same thread).
Where am I going wrong?
|
|
|
|
|
There's an instance for every module which includes the stdafx.h header file.
Try
In stdafx.h:
extern bool booleanValue;
And in one cpp file:
static bool booleanValue= true;
|
|
|
|
|
That worked. Thanks!
Had to use just:
bool booleanValue = true;
in cpp file.
So should this be done for functions as well?
|
|
|
|
|
switang wrote: Had to use just:
bool booleanValue = true;
Yeah, I suppose static is redundant in that case
switang wrote: So should this be done for functions as well?
Yes. Declare them in the header, define them in cpp files. Unless you need specific instances
for each cpp module. In that case (file local scope) you probably wouldn't want the declaration
in the header file anyway.
Mark
|
|
|
|
|
Thanks,
...Learn'n me some'm
Now I am a C++ Master...
|
|
|
|
|
Hello,
If you need global variables and functions just use class with static public members like this:
class GlobalWrap
{
public:
static int i1;
static double d1;
static void* pv1;
};
You can add constructor and destructor for initialization and memory cleaning and use it like this:
GlobalWrap::i1;
GlobalWrap::d1;
GlobalWrap::pv1->…
Regards,
Leonid
|
|
|
|
|
Thanks.
Never thought to do it that way...thanks again.
|
|
|
|
|
Hi
I'm working in a net monitoring system, and I sending on certain events packages to a server.
But, if the net falls I need to save the packages, and when the connection is restablished send them.
So, Im saving the packages to a text file, but when I recover the packages to send them, they are in reverse order, the newest is sent before the oldest.
Is any way I can get the packages from the beginning of the file and send them and then "move" the begining of the file?
Should I approach the problem from a different side?
In resume, I need to know how is easier to save a FIFO queue to a file.
Any idea?
Thanks
|
|
|
|
|
You can fix this in 1 of 2 ways (easily). You can pop the items off to a stack and then write the stack to the file (and then just read it normally), or you can write it off in the same order you are doing it, but read it into a stack and then move it to your queue. Either case will fix your ordering problem.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
But I'll have a lot of disk operations, and I wanted to avoid them
Well, seems that I'll have to do that
Thanks a lot Zac
|
|
|
|
|
You can avoid the excess disc operations by using a vector instead of a stack and then using a bulk write/read operation so the rest of the algorithm deals with data that is in memory already.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Hello,
Just use serialization for Array class.
Regards,
Leonid
|
|
|
|
|
I decided to keep a linked list in memory with the packages and when the service is closed the data is saved to an encoded text file.
On service wakeup, I load the saved packages.
The only problem is if the PC is reset or suffers a power shutdown, some packages will be lost...
Thanks a lot for the feedback
|
|
|
|
|
Every time this method get called I get another GDIObject. I cant figure out which object is causing it. The HBITMAP in the return is “DeleteObject” in the calling code. Any recommendations?
Here is my code examples
HBITMAP CTE3dSatWebClient::LoadSatRender()
{
BSTR bitMapLocation;
HBITMAP SatBit;
BSTR noImagetest = SysAllocString(L"no image");
LPCTSTR SatLoadFile;
char szBuffer[256];
sprintf(szBuffer, "CTE3dSatWebClient::LoadSatRender running ");
LogDebugInfo(szBuffer);
if( !m_pSatMap )
return 0;
bitMapLocation = m_pSatMap->SaveImageToFile();
if(bitMapLocation == noImagetest)
{
sprintf(szBuffer, "CTE3dSatWebClient::LoadSatRender LoadImage returned failure ");
LogDebugInfo(szBuffer);
return 0;
}
CString csTmpBuff = bitMapLocation;
SatLoadFile = csTmpBuff;
SatBit = (HBITMAP)LoadImage(0, SatLoadFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
sprintf(szBuffer, "CTE3dSatWebClient::LoadSatRender LoadImage Complete ");
LogDebugInfo(szBuffer);
remove(SatLoadFile);
sprintf(szBuffer, "CTE3dSatWebClient::LoadSatRender SatLoadFile Removed ");
LogDebugInfo(szBuffer);
SysFreeString(bitMapLocation);
SysFreeString(noImagetest);
return SatBit;
}
Thanks
Programmer
Glenn Earl Graham
Austin, TX
|
|
|
|
|
Is your HBITMAP selected into the device context when you call DeleteObject? That would definitely cause a resource leak.
- S
50 cups of coffee and you know it's on!
|
|
|
|
|
Yes the calling code is as follows
hbm = m_pSatMemMap->LoadSatRender();
...
hOldBitmap = (HBITMAP)SelectObject(dcImage, (HGDIOBJ)hbm);
...
if ( hOldBitmap != NULL )
SelectObject(dcImage, hOldBitmap);
if ( hbm != NULL )
{
if ( !DeleteObject(hbm) )
Programmer
Glenn Earl Graham
Austin, TX
|
|
|
|
|
Hmmm, I don't see anything wrong your code. I assume you traced in debug mode, and it's actually calling DeleteObject.
Is SaveImageToFile creating any gdi objects (not sure why it would, just a thought)?
- S
50 cups of coffee and you know it's on!
|
|
|
|
|
I inserted a for loop just before
bitMapLocation = m_pSatMap->SaveImageToFile();
no effect.
Then I put one in front of the
hbm = m_pSatMemMap->LoadSatRender();
and the GDIObject leak was one for every call.
I'm pretty sure its this method.
I thought it might be the loadimage function
Thanks for you help
Programmer
Glenn Earl Graham
Austin, TX
|
|
|
|
|
On your for loop in front of LoadSatRender(), we're you calling DeleteObject()?
Just for fun, in your calling routine, change:
if ( hOldBitmap != NULL )<br />
SelectObject(dcImage, hOldBitmap);<br />
to just:
SelectObject(dcImage, hOldBitmap);<br />
(i.e. remove the if statement )
and see if that has any effect.
- S
50 cups of coffee and you know it's on!
|
|
|
|
|
had no effect.
Programmer
Glenn Earl Graham
Austin, TX
|
|
|
|
|
Check out this thread...GDI handle count[^]
Is there caching in the system? Is task manager's reporting wrong? Enquiring minds want to know!
Mark
|
|
|
|
|
Sorry, I'm fresh out of ideas, without seeing more of the source.
- S
50 cups of coffee and you know it's on!
|
|
|
|