|
I have hosted WebBrowser in my application. (CHtmlCtrl).
Sometimes (i can't find out when), but not always, after navigation is complete,
window containing browser is activated and get focus.
How to avoid this activation ?
Thank you
rrrado
|
|
|
|
|
Hello!
I Deveoped a Program.
that program is draw a many object(circle, image, rectangle, text, etc)
i ran that program in debugging mode but that program is stop.
stop code is below...
[Header File]
char text[256];
[CPP File]
void Class::Draw(CDC* pDC)
{
// text have a value. value is "OPEN"
...
...
CString strText = _T("");
strText = text;
int nFind = strText.Find('.'); ===> Run is Stop
...
...
}
but i run that program continuously use a F5 Key.
then that program is run (not have problem...)
i don't know why happened that problem...
|
|
|
|
|
i think problem will be one line above.
char text[] should be TCHAR [] (to work in unicode build).
What does contain text ? is it correctly null terminated string ?
rrrado
|
|
|
|
|
Suppose I need to make a generic class and use "void* m_pData" to store pointer to an object, of which the data type is unknown at compiling time. In the destructor I want to free the memory, is it safe to use "delete m_pData"? Thanks.
|
|
|
|
|
sure it is, delete does not know anyway, how did you declare that pointer
rrrado
|
|
|
|
|
Contrary to an earlier reply, I would say NO.
If you think about delete, it is actually a two stage process.
1) Call the destructor.
2) Give the memory back.
deleteing a void pointer may do a free on the memory, thus completing stage 2,
but the compiler wouldn't have a clue as to which destructor (if any) to call. At
best you would not completely dismantle the class (imagine if it had pointers to other
allocated memory...)
If you really wanted a generic delete, then have a very basic class
that all of your generics inherit from:
class GenericBase
{
public:
virtual ~GenericBase () {}
};
class Specific : public GenericBase
{
};
And use a GenericBase * in place of the void * in your code. The virtual
destructor means any inheriting class have a vtable and thus will have their (or ancestor
classes) destructor called as well.
I feel all "Matt Pietrik"y!
Iain.
|
|
|
|
|
That solves my problem. Thank you.
|
|
|
|
|
oh, you're right
<ashamed>
rrrado
|
|
|
|
|
Can anyone help me with the following problem? I have the following classes:
[code]
//DMR.h file
template <class t="">
class DMR
{
public:
static T* New();
...
};
class foo : public DMR<foo>
{
public:
...
};
//main.cpp file
#include “DMR.h”
int main()
{
foo::New();
return 0;
}
[/code]
Trying to execute this code I get a linking error for unresolved symbol. More specifically I get this:
DDK error LNK2019: unresolved external symbol "public: static class foo * __cdecl DMR<class foo="">::New(void)" (?New@?$DMR@Vfoo@@@@SAPAVfoo@@XZ) referenced in function _main
Any idea of what I ‘m doing wrong?
Thank you, Themis
|
|
|
|
|
First of all, the linker is right, you have never (in the sample you gave) written a
T* DMR::New ()
{
T *t = new T;
t->DoSomething ();
return t;
}
function.
While I am no great expert on templates (since I found they don't work with __declspec() I'm
not so keen) I think you have another error. You never do the <> thing to specify the type of
T you are using. Maybe you actually mean:
class foo
{
void DoSomething ();
};
int main ()
{
DMR<foo> f;
f.New ();
return 0;
}
Or was I misunderstanding your intent?
Iain
|
|
|
|
|
I forgot to mention that I 've written the body T* DMR::New(), so this is not the problem.
My intent is to create new instances of the foo class using the New method of DMR. I use the template superclass in order to be able to implement it later on another class, let's say yak class.
Themis
|
|
|
|
|
My misunderstanding.
There are (not unreasonably) problems inheriting static functions. I presume you have templated the
DMR class to get around these. From the linker error, the compiler has implicitly assumed a
static foo * foo::New () function which you haven't implemented. Which probably brings you back
to square one again...
Just a thought... You may be able to create an non-static operator new in class DMR which
would be inherited. Probably! You are delving into the nasty bit of C++...
I'd be tempted to go back to the drawing board and see what your New function is doing. Maybe you
could just do it in the DMR::DMR () function.
There are usually several ways of achieving the same result. Maybe you've just picked the hard way!
Iain.
|
|
|
|
|
Hi,
How can I get the file list of a directory?
like CListbox::dir but directly.
thanks
|
|
|
|
|
Use the functions FindFirstFile() , FindNextFile() , and FindClose() . You'll need to recurse through and directories you come across though.
|
|
|
|
|
HI,
I wish to draw(in MFC) a simple rectangle box onto a constant refreshing picture.i tried to create two Picture control object and overlap one over the other. However, the box always get erased because of the refreshing picture.
If anyone knows how to slove this problem please help me..^^..
|
|
|
|
|
Hello All,
Is the Windows NT/2000 GINA system the same one used by Windows XP ? If I already have a custom GINA DLL that is usable in Win NT/2K, can I use this GINA in Win XP ?
Thanks all,
Bio.
|
|
|
|
|
Hi
I've just placed a CListCtrl into my dialog in a VC5 project.
I should be able to enable 'Owner data' in the style property of the CListCtrl. But i don't find it, i only find 'owner data fixed'.
However, if i place a CListCtrl in a VC6 project i find it & can enable it.
Anyone knows how to get this working in a VC5 project?
Best regards
Jens
|
|
|
|
|
hi Jens ! Still struggling with your VC5 project
DWORD d=m_List.GetExtendedStyle();
d|=LVS_OWNERDATA;
m_List.SetExtendedStyle(d);
(I expect you t say there is no SetExtendedStyle in VC5 .. Am I right ?)
~RaGE();
|
|
|
|
|
yeah you were right
btw, i think owner data fixed in vc5 is the same as 'owner data' in vc6.
Now need to work around 'SetItemCountEx' which is not a member function (again ) of CListCtrl. Damn vc5 can suck sometimes. Any ideas to work around this prob. let me know
Just edited Thinks this will do the trick:
m_itemcount= 100;
m_virlist.SendMessage(LVM_SETITEMCOUNT, m_ItemCount)
Greetings
|
|
|
|
|
uhm, doesn't want to display any data in the list.
I've put it on 'owner data fixed'
I fill the array correctly. I'm sure of that because i've written the array to a log file too.
But the list isn't displaying anything.
void CTestVirtList::OnGetdispinfoVir(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;
CWknItem rWkn = m_arLabels.ElementAt(pItem->iItem);
if (pItem->mask & LVIF_TEXT) //valid text buffer?
{
// then display the appropriate column
switch(pItem->iSubItem)
{
case 0:
lstrcpy(pItem->pszText, rWkn.m_WknId);
break;
case 1:
lstrcpy(pItem->pszText, rWkn.m_WknName);
break;
default:
ASSERT(0);
break;
}
*pResult =0;
}
But the code above (OnGetdispinfover) doesn't get called i see now. (i've put a messagebox into the function)
Anyone have any ideas?
Greetings
Jens
|
|
|
|
|
Did you miss the m_virlist.Invalidate() ?
~RaGE();
|
|
|
|
|
JensB wrote:
btw, i think owner data fixed in vc5 is the same as 'owner data' in vc6.
I agree.
JensB wrote:
m_itemcount= 100;
m_virlist.SendMessage(LVM_SETITEMCOUNT, m_ItemCount)
yup.
m_virlist.SendMessage(LVM_SETITEMCOUNT, (WPARAM)m_ItemCount, (LPARAM)LVSICF_NOINVALIDATEALL
)
~RaGE();
|
|
|
|
|
Did you miss the m_virlist.Invalidate() ?
No, that's just the strange part of it
I did a invalidate() but control doesn't ask for the data.
Jens
|
|
|
|
|
I'll paste the code that is executed
CWknItem MyItem;
MyItem = m_arLabels.ElementAt(2);
AfxMessageBox(MyItem.m_WknId);
m_virlist.SendMessage(LVM_SETITEMCOUNT, (WPARAM)m_ItemCount, (LPARAM)LVSICF_NOSCROLL);
m_virlist.Invalidate();
// Invalidate -> should call the function who takes care of setting data in ctrl
In .h header file:
afx_msg void GetDispInfo(NMHDR* pNMHDR, LRESULT* pResult);
Message map:
ON_NOTIFY(LVN_GETDISPINFO, LIST_VIR, GetDispInfo)
void CTestVirtList::GetDispInfo(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
AfxMessageBox(" in getdispinfo");
...
}
Doesn't seem like it gets into that function
|
|
|
|
|
MSDN :
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
ON_NOTIFY_REFLECT(LVN_GETDISPINFO, GetDispInfo)
END_MESSAGE_MAP()
~RaGE();
|
|
|
|