|
Yes, exactly.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|
The Apocalyptic Teacup wrote: If not, then what is the advantage of a managed class in C++?
C++/CLI is not really C++; it is a new programming language that targets .NET platform and aims to be backward compatible with C++.
|
|
|
|
|
Managed C++ (or C++/CLI as it's called in VC2005) isn't something you just tack onto an existing project. You should redo the code as managed only if you intend to make use of the BCL or want your code to be usable by other managed apps.
|
|
|
|
|
hi
is it posible that i can use an diectshow graph inside an dll ?
so i want to call this dll ofer an com interface .
the output of the filter is only a file.
with kind regards enrico hofmann
|
|
|
|
|
gigo2k6 wrote: is it posible that i can use an diectshow graph inside an dll ?
Why not?
gigo2k6 wrote: o i want to call this dll ofer an com interface .
If you want to create a COM object in-process (a COM DLL), then why not?
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.
|
|
|
|
|
ahh ok / is there a good manual for creating a dll for com on c++ ?
i also prefer german language if available, but english is also ok...
with kind regards enrico hofmann
|
|
|
|
|
gigo2k6 wrote: ahh ok / is there a good manual for creating a dll for com on c++ ?
Of course there are a lot (but I don't know them...)
When building a COM DLL, basically you have three ways:
(1) Using MFC COM support. This maybe the 'easyest way' (AFAIK Jeff Prosise's "Programming Windows With MFC" contains an introduction about, maybe enough...)
(2) Using ATL. This is a bit lower level, but it is also lighter and gives you (at least in my opinion) more power. About the argument I remember only Shepherd G., King B., "Inside ATL" a quite advanced book (Anyway using the ATL COM Wizard of Visual Studio it's strighforward).
(3) Handcrafting your COM component: there is a beatyful article series, written by Jeff Glatt, here at CodeProject, starting with [^].
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.
|
|
|
|
|
If I programmatically create a CListCtrl in report mode (or derived class) without the WS_VISIBLE attribute, it blows chunks trying to init a header for it.
It blows when, during my header init, I try to delete any old header columns that might be there already. The header init is in a separate DLL, if that matters. Here's the line of code that blows:
int nColumnCount = pList->GetHeaderCtrl()->GetItemCount();
Any clues as to why this happens, or a workaround?
Thanx.
|
|
|
|
|
Exactly how does it blow chunks? Assertion error? BSOD?
|
|
|
|
|
First chance exception: Access violation trying to get the header.
Everything looks fairly normal, window handles ok, etc.
The only thing different between working and not, is the visible flag is removed when creating the control.
I'm presuming that the header control is not actually created until the list control is made visible. I can create the list control visible, and then hide it, but that's kind of hokey I think...
|
|
|
|
|
When you remove WS_VISIBLE you have this problem?and do you need to remove this style
|
|
|
|
|
I don't tthink it's a visibility problem.
Are you creating the control with the LVS_REPORT style?
Something is failing across this call "pList->GetHeaderCtrl()->GetItemCount();".
You can break it down...
1) If the listview control is created then pList should be non-zero and should have a valid HWND.
2) HWND hwndHeader ListView_GetHeader(*pList); should give you a valid HWND in hwndHeader.
3) int nItemCount = Header_GetItemCount(hwndHeader); should give a valid count.
If you're initializing a new control how can there be any columns in it?
|
|
|
|
|
Ok, I tried doing it this way, and not even using my DLL for initing the header, and it fails. m_SearchList has a valid hwnd after being created, but the header does not (all zeros). If I put WS_VISIBLE in the create flags, it works fine, and gets a valid header...
m_SearchList.Create(WS_CHILD | WS_BORDER | LVS_REPORT, ctrl.cr, this, ctrl.nID);
CHeaderCtrl *hdr;
hdr = m_SearchList.GetHeaderCtrl();
BTW: This is a skinned based app, so the skin designer controls the visibility of the individual controls, although they still have to exist. That is the reason for creating them without visibility.
-- modified at 9:16 Tuesday 23rd January, 2007
|
|
|
|
|
Cpt Rick wrote: BTW: This is a skinned based app, so the skin designer controls the visibility of the individual controls, although they still have to exist. That is the reason for creating them without visibility.
I'm with ya there. Creating/initializing controls before displaying them is common.
I'm going to investigate this further. That kinda sucks if the list control doesn't create
it's header until it becomes visible (as you know )
I'll get back to you.
Mark
|
|
|
|
|
how do I monitor file/directory operations like Filemon (http://www.microsoft.com/technet/sysinternals/utilities/filemon.mspx) do?
Thanks in advance
|
|
|
|
|
It's a rather advanced topic. Maybe the authors of Filemon are you best friends, see here [^].
Cheers
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 does one do this in gdi+, mfc
- load png image into memory
- access array of values, eg as int or rgb bytes
and apply any changes to image, if this step is needed
- rotate image
- crop image
- save as bmp
i currently used CxImage, but it seems buggy - totally weird things happen after i use ::Rotate
Thank You
|
|
|
|
|
Bitmap class constructors will load a png image (as well as Bitmap::FromFile())
Image::RotateFlip() will rotate and/or flip
To crop, extract the desired portion from the source image into a second image (see below).
There's a Graphics::DrawImage() overload that will do just that.
Bitmap::Save() will save as any of the supported types (see below).
This sample code should be enough to get you started...
Gdiplus::Bitmap SrcBitmap(L"C:\\test.png", FALSE);
Gdiplus::Bitmap DstBitmap(320, 240, SrcBitmap.GetPixelFormat());
Graphics DstGraphics(&DstBitmap);
DstGraphics.DrawImage(&SrcBitmap, 0, 0, 320, 240);
CLSID bmpClsid;
GetEncoderClsid(L"image/bmp", &bmpClsid);
DstBitmap.Save(L"C:\\test.bmp", &bmpClsid, NULL);
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0;
UINT size = 0;
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1;
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1;
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return -1;
}
-- modified at 14:14 Sunday 21st January, 2007
edited for splelling
|
|
|
|
|
Forgot one...
You can use Bitmap::LockBits()/Bitmap::UnlockBits() to access the image bits.
Mark
|
|
|
|
|
You can use of GDI+ about this subjects but if you want to load and change some things on the image and save it you can use also of CImage class but for rotate GDI+ is better however its possible with CImage but GDI+ is easy.
|
|
|
|
|
a = b | c | ...
(1)
if (a & b)
{
....
}
(2)
if ((a & b) == b)
{
....
}
(1) and (2), use which is better? why?
thanks.
|
|
|
|
|
If the value 'b ' is a single bit, then the two approaches are equivalent.
If there are multiple bits set in 'b ', then they are not. (1) will be true if any of the bits in b are also set in a . (2) will be true if and only if the same bits that are set in b are also set in a .
Software Zen: delete this;
|
|
|
|
|
umm... Can you example some?
|
|
|
|
|
Example 1: Suppose a=0x1A (00011010 binary), and b=0x08 (00001000 ). In that case, <nobr>'if (a & b) ' and <nobr>'if ((a & b) == b) ' are both satisfied, since 'a & b ' evaluates to 0x08 .
Example 2: Suppose a=0x1A (00011010 binary) again, but this time b=0x09 (00001001 binary). In that case, <nobr>'if (a & b) ' is satisfied, yet <nobr>'if ((a & b) == b) ' is not.
Remember that the first if is satisfied by any non-zero value, while the second one requires that the result of the <nobr>'(a & b) ' expression equal the value of b .
Software Zen: delete this;
|
|
|
|
|
It depends.
If each of b,c,... corrensponds to just one bit set (e.g. <ode>b=1; c=2;...), then the expressions are equivalent (maybe (1) is faster).
On the other hand, if b,c,... holds composite bit values (e.g. <ode>b=3; c=5;...) then you have to carefully choose the expression you need, since (1) meets the requisite of an OR condition, while (2) corrensponds to an AND one). For instance, conside the following code snippet:
enum
{
FEMALE = 1,
YOUNG = 2,
...
};
if b=FEMALE; then both the (1) and (2) meet the condition, but if you are searching for a young female (b=YOUNG|FEMALE; ), the you have to be careful, because (1) holds true also when a represents a young guy or an old lady!
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.
|
|
|
|