|
Thanks for the nice observation. I did the 2 changes to erase possible defects. Somehow, the problem seems not gone yet. I tried to decrease the frame rate to
sAviStreamInfo.dwScale = 1;
sAviStreamInfo.dwRate = 30;
it happened to work. But the dwRate can not be larger than 30. and the image size must be less than 580x580. Otherwise, problem holds. It sounds really strange since no rate or size limitation for DivX Codec is known about.
If more comments, I like to know.
|
|
|
|
|
What about 720x576 25 fps ?
I'm not sure where to find an accurate description of valid formats for that codec
Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
im trying to get my window to update using update UpdateLayeredWindow, but no luck so far.
this is the function im using:
void update(HWND hwnd){<br />
HDC pDC = GetDC(hwnd);<br />
HDC dcMem;<br />
dcMem = CreateCompatibleDC(pDC);<br />
COLORREF colour;<br />
colour = RGB(255,255,255);<br />
HBITMAP bmp;<br />
bmp = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));<br />
if(!bmp)MessageBox(NULL,"FAIL TO LOAD IMAGE", "ERROR",NULL);<br />
<br />
HBITMAP pOldBitmap = (HBITMAP) SelectObject(dcMem, bmp);<br />
<br />
<br />
BLENDFUNCTION blend;<br />
blend.BlendOp = AC_SRC_OVER;<br />
blend.BlendFlags = 0;<br />
blend.SourceConstantAlpha = 255;<br />
blend.AlphaFormat = AC_SRC_ALPHA;<br />
<br />
POINT ptSrc = {10, 10 };<br />
SIZE sz = { 100, 100 };<br />
UpdateLayeredWindow(hwnd, NULL, NULL, &sz, dcMem, &ptSrc, colour, &blend, ULW_COLORKEY );<br />
DWORD dwError = GetLastError();
<br />
DeleteDC(dcMem);<br />
DeleteObject(pDC);<br />
}
it compiles and runs fine is just that UpdateLayeredWindow is doing nothing.
thank you
|
|
|
|
|
Maybe a silly question - Is the HWND a handle to a window created as a layered window?
If so...
Is the window a child window?
Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
yes is the handle to the window and no is not a child window.
i've also posted on this forum the code:
http://www.gamedev.net/community/forums/topic.asp?topic_id=449081
thank you
|
|
|
|
|
Cool thanks for the link!
I don't think you should be calling SetLayeredWindowAttributes().
Try commenting out that call.
Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
hehe the window does not show if i do that.
|
|
|
|
|
OK but they are not meant to be used together - they cause the window updates to be done
two different ways.
If you must use both, the docs state "Note that once SetLayeredWindowAttributes has been called
for a layered window, subsequent UpdateLayeredWindow calls will fail until the layering style bit
is cleared and set again."
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
without the SetLayeredWindowAttributes i dont get the 87 error code form getlast error which is a good news, but the window is not showing and UpdateLayeredWindow is returning 0;
|
|
|
|
|
Lamefif wrote: the window is not showing and UpdateLayeredWindow is returning 0;
If it's returning 0 then it's still failing, right? Or do you mean GetLastError() returns 0?
ACK I just noticed in your code on the other site - you are destroying the memDC. I'm pretty
sure the system is going to need that to draw the window! Try keeping it around for the life of
the window instead.
Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
Thanks mark you've been a great help, the window is now showing. it was blend.SourceConstantAlpha = 255; set to 0 i think.
but i still have some problems
im using this image,
http://mathforum.org/library/drmath/gifs/analog_clock.jpg
the white part of the image is showing the blue part is transparent.
and mouse clicks go through the window, regardless where i click on it.
|
|
|
|
|
using LWA_COLORKEY gets around that it seems, but the window comes out pixilated .
now i have to figure out how to use an alpha channel
|
|
|
|
|
Lamefif wrote: the window comes out pixilated
Because you've sized the window bigger than the bitmap??
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
To hide the white you'll need to use
UpdateLayeredWindow(hwnd, NULL, NULL, NULL, dcMem, NULL, RGB(255,255,255), 0, ULW_COLORKEY);
To use alpha blending on the entire bitmap you'd use
UpdateLayeredWindow(hwnd, NULL, NULL, NULL, dcMem, NULL, 0, &blend, LWA_ALPHA);
To use both alpha and color key, you need to use SetLayeredWindowAttributes() instead of
UpdateLayeredWindow()...
SetLayeredWindowAttributes(hwnd, RGB(255,255,255), alphavalue, LWA_COLORKEY | LWA_ALPHA);
Then you'd have to draw the bitmap yourself in response to WM_PAINT.
Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
im having trouble with the pixilated edge, i tried adding a png file with an alpha cannel as a resource but it came out as row data.. ups.
i want to use perpixilalpha as you can tell, whats the best way to go about this?
thanks again
|
|
|
|
|
Have you tried using CImage or the GdiPlus::Bitmap class to load the png?
Then you should be able to use the associated HBITMAP, selected into the dcMem and use
UpdateLayeredWindow() like this:
blend.BlendOp = AC_SRC_OVER;
blend.BlendFlags = 0;
blend.SourceConstantAlpha = 255;
blend.AlphaFormat = AC_SRC_ALPHA;
UpdateLayeredWindow(hwnd, NULL, NULL, NULL, dcMem, NULL, 0, &blend, LWA_ALPHA);
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
Also, check success or fail of UpdateLayeredWindow() call BEFORE calling GetLastError() -
in other words, only call GetLastError() if the UpdateLayeredWindow() call fails.
Not all APIs clear the thread's last error when they succeed.
Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
yes but UpdateLayeredWindow() returns 0 which means is failing.
and the fact that is not doing anything
|
|
|
|
|
Are SIDs for only local machine or are there SIDs related with active directory /domain controller ?
If it is then how can i get SIDs related with active directory /domain controller ?
|
|
|
|
|
Hi,
I had created dll using C# and I had been using that myLib.dll for long time.
But today, I updated myLib.dll and register it again with RegAsm.exe and create the myLib.tlb file as I used to do. However my C++ program couldn't create Instance of dll because "The System cannot findthe file specified." error message today.
What did I do wrong today? It was OK all time. I had updated myDll.dll so many time before and able to called from C++ program using the same function
bool CClientJob::CoInitRoscoeLib(void)
{
m_roscoeLib = NULL;
int retval = 1;
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_MyLib,
NULL,
CLSCTX_INPROC_SERVER,
IID_IMyLib,
reinterpret_cast<void**>(&m_myLib));
if (FAILED(hr))
{
CString k;
k.Format(L"Couldn't create the instance!... 0x%x\n", hr);
AfxMessageBox(k);
return false;
}
else
return true;
}
in CClientJob.h i have
#import "C:\Code\2007\03\RoscoeFuns\RoscoeFuns\bin\Debug\myLib_4.tlb" no_namespace named_guids
Why the error message of HRESULT hr is
" 0x80070002 The system cannot find the file specified. "
Please help me out.
Thank you so much.
|
|
|
|
|
clean up your old #import generated files
led mike
|
|
|
|
|
I did removed old dll from the debug and it works for one program but doesnt' work for the other program. Deleting dll from debug doesn't work.. I also tried to regasm /unregister "myLib.dll".
If I go to RegEdit.. I saw lots of classes of myLib.dll repeatly.
Do they suppose to be to appear in HEKY_CKASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG.
Was it because of memory? How am I going to clean old dll?
Thanks
|
|
|
|
|
pnpfriend wrote: I did removed old dll from the debug
That's not what I said. #import generates header files. If you don't study and understand the technology you use these sorts of problems are inevitable.
led mike
|
|
|
|
|
=( I know.. I tried to learn and I'm still trying to learn.
I have the following line in the header file.
#import "C:\NewLocation\myLib.tlb" no_namespace named_guids
myLib.tlb is the new dll that I created.
It is saved in Newlocation. The file actually exists in NewLocation folder.
Was it that you were talking about? If I'm still wrong and misunderstanding you,
Would you please refer me some links to study more about what I should know.
Thank you Mike.
|
|
|
|
|
pnpfriend wrote: Would you please refer me some links to study more about what I should know.
Here is good one[^]
See the section "Header files created by import"
Hope that helps
led mike
|
|
|
|