|
I have an MDI application implemented using third-party controls. I have implemented the basic OLE drag and drop. I am stuck trying to get a tree node to expand when I hover over it. My code implements the OnDragOver, OnDrop, OnDragLeave, OnDragEnter, OnBeginDrag. The sample code uses the old style drag and drop. When I add OnMouseMove and OnTimer methods, they never get control. I have debug tracing in the various methods. I have looked at Jeff Prosise's book but have found nothing that seems similar to my situation. I have tried moving the code from OnMouseMove to OnDragOver. Then the OnTimer method does not get invoked. I have tried calling SetFocus, but that does not help either. I am a MFC novice. Can anyone point me in the right direction?
|
|
|
|
|
I was able to implement this feature for OLE drag'n'drop in CTreeCtrl. I had to derive the class from COleDropTarget and override OnDragScroll method. This way I was able to handle the scrolling and expanding during the DnD.
I'm including the code here, surely it will be formatted incorrectly, but may be helpful.
DROPEFFECT CNavigationTree::DropTarget::OnDragScroll(CWnd *pWnd, DWORD dwKeyState, CPoint point)
{
DROPEFFECT dropEffect = DropEffectFromKeyState(dwKeyState);
DWORD currentTicks = ::GetTickCount();
CTreeCtrl &tree = *static_cast<ctreectrl *="">(pWnd);
UINT flags;
HTREEITEM hti = tree.HitTest(point, &flags);
if (hti != m_htiLastItem)
{
m_htiLastItem = hti;
m_lastItemTicks = currentTicks;
}
if (currentTicks - m_lastTicks < DD_DEFSCROLLDELAY)
{
return dropEffect;
}
m_lastTicks = currentTicks;
if (NULL != hti)
{
if (point.y < DD_DEFSCROLLINSET)
{
tree.SendMessage(WM_VSCROLL, MAKEWPARAM(SB_LINEUP, 0), NULL);
return dropEffect | DROPEFFECT_SCROLL;
}
CRect rcClient;
tree.GetClientRect(rcClient);
if (point.y > rcClient.bottom - DD_DEFSCROLLINSET)
{
tree.SendMessage(WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), NULL);
return dropEffect | DROPEFFECT_SCROLL;
}
if (currentTicks - m_lastItemTicks > 500 &&
(flags & (TVHT_ONITEM | TVHT_ONITEMBUTTON)) != 0 &&
tree.ItemHasChildren(hti) &&
tree.GetItemState(hti, TVIS_EXPANDED) != TVIS_EXPANDED)
{
tree.Expand(hti, TVE_EXPAND);
}
}
return dropEffect;
}
Tomasz Sowinski
http://www.shooltz.com.pl
|
|
|
|
|
Hi guys,
I have a dialog based app, that I want to copy files from one location to the a:\
The user clicks a button & the files are copied. The user has no control over the folder files that are copied.
I want to be able to check that a disk is in the a:\, & then start copying the files, if the a:\ fills up, don't copy any more files, & if it's in the middle of a copy to rollback & not cancel that file copy.
How best can I do this....sample code or direction to site is good.
Gerry.
|
|
|
|
|
Is it possible to pass formatted string to functions?
//function prototype
void find(CString s, int n);
//code 1
//this is what I want to implement
find("0=", nLevel);
// do something
find("1=", nLevel);
// do something
find("2=", nLevel);
// do something
// code2
// to implement the above in a for loop
// can I do something like this?
for (i = 0, i<=3, i++)
{
//blah blah
find("%d=" i, nLevel);
// blah blah
}
code 2 obviously doesnt work, but is there any other way I can implement code 1?
pls help
|
|
|
|
|
Hi !
Try this:
void find(CString& s, int n);
for (i = 0, i<=3, i++)
{
//blah blah
CString str ;
str.Format("%d", i);
find(str, nLevel);
// blah blah
}
===========================
Is it possible to pass formatted string to functions?
//function prototype
void find(CString s, int n);
//code 1
//this is what I want to implement
find("0=", nLevel);
// do something
find("1=", nLevel);
// do something
find("2=", nLevel);
// do something
// code2
// to implement the above in a for loop
// can I do something like this?
for (i = 0, i<=3, i++)
{
//blah blah
find("%d=" i, nLevel);
// blah blah
}
code 2 obviously doesnt work, but is there any other way I can implement code 1?
Best regards,
-----------
Igor Soukhov (Brainbench/Tekmetrics ID:50759)
igor_soukhov@mailru.com | ICQ:57404554 | http://siv.da.ru
|
|
|
|
|
try something like:
void findV (LPCSTR szFormat, int nLevel,...)
{
va_list argList;
va_start(arglist, nLevel);
CString str;
str.FormatV (szFormat, argList);
va_end(argList);
find(str, nLevel);
}
you can then do
for (int x =0; x<3; x++)
{
findV("%d=", nLevel, x);
}
The nLevel in there makes it kind of odd. If this is an out parameter you might want to change it to a return value.
|
|
|
|
|
Hello everyone!!!!
I've to capture the window messages of programs in execution from my application developed in Visual C++ 6.0.
I'd like to access to the window text and buttons text of any message error. How could I do this?????
Thanks in advance.
|
|
|
|
|
Hi !
Take a look at hooks.
Best regards,
-----------
Igor Soukhov (Brainbench/Tekmetrics ID:50759)
igor_soukhov@mailru.com | ICQ:57404554 | http://siv.da.ru
|
|
|
|
|
Could you have more details in relation to your answer or sample code, please??
Thanks in advance,
LuisFer.
|
|
|
|
|
Using SetWindowsHookEx you should set global hook. Hook procedure should be placed in DLL.
Best regards,
-----------
Igor Soukhov (Brainbench/Tekmetrics ID:50759)
igor_soukhov@mailru.com | ICQ:57404554 | http://siv.da.ru
|
|
|
|
|
Using SetWindowsHookEx you should set global hook. Hook procedure should be placed in DLL.
Use WH_CALLWNDPROC hook type to intercept messages.
Best regards,
-----------
Igor Soukhov (Brainbench/Tekmetrics ID:50759)
igor_soukhov@mailru.com | ICQ:57404554 | http://siv.da.ru
|
|
|
|
|
Thank you for your previous answer, but I need more information or sample code about "Hooks" taking into account my knowledge of Visual C++. I've seen the SetWindowsHookEx function but I don't understand how to use it.
Thanks in advance and best wishes,
LuisFer.
|
|
|
|
|
I took a look, I saw a nook, and on his head he had a hook. On his hook, he had a book, and on his book said how to cook. But a nook, can't read, so a nook can't cook, so what use to a nook is a hook cook book ?
Sorry, it's early Friday....
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
If you don't want to program, you can use the Spy++ tool with ships with VC++.
You can use it to detect all messages received by the window you can inspect.
Regards
Luis
|
|
|
|
|
can't get this code working.
DWORD fileLength = workFile.GetLength(); //line 1
char fileBuf[fileLength]; //line 2
workFile.Read(fileBuf, fileLength); //line 3
compiler says (all for line 2):
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'fileBuf' : unknown size
|
|
|
|
|
Hi !
Try this:
DWORD fileLength = workFile.GetLength(); //line 1
//char fileBuf[fileLength]; //line 2
char * fileBuf = new char[fileLength];
workFile.Read(fileBuf, fileLength); //line 3
....
delete[] fileBuf;
Best regards,
-----------
Igor Soukhov (Brainbench/Tekmetrics ID:50759)
igor_soukhov@mailru.com | ICQ:57404554 | http://siv.da.ru
|
|
|
|
|
thanz.. that solved part of the problem.. now the compiler says that fileBuf is undeclared (line 2)
*confused*
|
|
|
|
|
correction to my previous post ... the error lies in the line:
delete[] fileBuf;
it says identifier undeclared.
|
|
|
|
|
please ignore all my previous post.. the problem is fixed.. overlooked some areas..
thanz a lot for your help!
|
|
|
|
|
If I make the broadcast to a real nameserver it is ok. If I give INADDR_BROADCAST , no one response. Kindly help to me.
Thankyou
Anita Eugene
|
|
|
|
|
my code is below, there is no compiler error, but when i run the exe file, it says "An unknown errro occurred while accessing C:\myfile.txt"
can anybody help me?
CStdioFile workFile;
CFileException e;
CString filepath = m_tsfFilepath;
if(!workFile.Open(filepath, CFile::modeWrite | CFile::shareDenyWrite, &e ))
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
int pos = 0;
CString workString("");
CStringArray aRegisterList;
workFile.Seek(pos, CFile::begin); //position pointer to beginning of file
workFile.ReadString(workString); //read the first line of text
thanz in advance!
|
|
|
|
|
The thing that jumps out at me is that you are opening the file with flags set for WRITE not READ.
I'll confess I did not thoroughly step through your code simply because I noticed that right away.
I hope that's it because that's easy.
|
|
|
|
|
thanz man! how stupid of me!
|
|
|
|
|
I find that the majority of the problems I have are for just such "simple" oversights.
I'm glad it helped.
|
|
|
|
|
In my message map...
BEGIN_MESSAGE_MAP()
...
ON_WM_????
END_MESSAGE_MAP
what is the message used to tell a window to assert the OnRecieve method of a CAsyncSocket object.
|
|
|
|