|
If I got you then you have to move the line of the same amount of the rectangle. i.e.
- Store the original position of the rectangle.
- On mouse move, subtract to current rectangle position the stored one, to obtain the offset.
- add the offset to the line.
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Can you tell me how to insert / acces an struct elements from another class then declare it ?
...
...
typedef struct tagLine{
CDrawObj* pObj;
UINT nHandle;
CPoint point;
}Line;
...
...
CList<<Line,Line>> m_line;
...
void CSelectTool::OnLButtonDown(CMyView* pView, UINT nFlags, const CPoint& point)
{
pView->m_line.AddTail(pView->Line(pObj,1,point));
}
void CSelectTool::OnMouseMove(CMyView* pView, UINT nFlags, const CPoint& point)
{
}
Can you help me please ? Thank you !!!
modified on Wednesday, September 1, 2010 2:51 AM
|
|
|
|
|
Try something like following :
...
typedef struct tagLine {
int m_i1, m_i2;
Line(int i1, i2) : m_i1(i1), m_i2(i2) {};
} Line;
...
void CMyView::AddNewLine(int i1, int i2)
{
m_Line.AddTail(new Line(i1, i2));
}
virtual void BeHappy() = 0;
|
|
|
|
|
Ok , and when I want to acces an element of m_Line ?
|
|
|
|
|
MSDN has a code sample [^] about accessing elements of a CList .
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
mesajflaviu wrote: pView->m_line.AddTail(pView->Line(pObj,1,point)); // this is error
If your structure is defined globally (not inside your class), then you can simply do something like this (given that the structure has the appropriate constructor and your m_line variable is public):
pView->m_line.AddTail(Line(pObj,1,point));
However, it is always better to make your variables private and provide a AddLine to your CMyView instead.
mesajflaviu wrote: // I don't know how to access element of pView->m_line;
The same way you wrote it. But once again, providing a getter is much more clean.
If you want to access a specific line in your list, then you have to use the methods from the list to retrieve the line you are looking for.
|
|
|
|
|
Here is my trial :
typedef struct tagLine{
CDrawObj* pObj;
UINT nHandle;
CPoint point;
}Line;
...
...
CList<Line,Line> m_line;
void CMyView::AddLineStruct(CDrawObj* pObj, UINT nHandle, CPoint point)
{
Line LineStruct;
LineStruct.pObj = pObj;
LineStruct.nHandle = nHandle;
LineStruct.point = point;
m_line.AddTail(LineStruct);
}
void CSelectTool::OnLButtonDown(CNetMapView* pView, UINT nFlags, const CPoint& point)
{
...
pView->AddLineStruct(pObjLine,nHandle,point);
...
}
void CSelectTool::OnMouseMove(CNetMapView* pView, UINT nFlags, const CPoint& point)
{
POSITION pos = pView->m_line.GetHeadPosition();
while(pos != NULL)
{
pView->Line data = pView->m_line.GetNext(pos);
}
}
still , I don't know how to acces elemts of the structure ....
|
|
|
|
|
Perhaps will go if I declare Line strucure as global , but I didn;t want to do that ... is not elegant
|
|
|
|
|
Why not ? If your structure has to be manipulated externally from your CMyView class, then it makes sense to make it a class which is not defined in your CMyView class (the class, not instances of the class of course).
And I would probably make it a class instead of a structure because you could add some useful methods to it (like check if the line is close enough to a given point, calculate the lenght of the line, ...). Of course, you can still do that with a structure but for most people using a structure in C++ means that it is an object that only contains data (and no method). This is of course not a strict rule.
|
|
|
|
|
The AddLineStruct method is correct and is what you have to do in order to hide the implementation details from classes which are using CMyView (encapsulation).
Now you should do something similar as that for retrieving a line. I don't know based on which information you would like to retrieve a specific line but I guess this is based on the mouse location (the point variable) ?
So, you could create a method GetLine(const CPoint* point) which is retrieving a line (or an array of line) which are close to the point. This way, you also hide the internals about how your lines are managed by the CMyView class.
Just to clarify your doubts: you seem to be very confused about how to declare your variable (because in all cases it was wrong). So, if your structure is globally defined, you just have to do this:
Line newLine = ....; and if your structure is defined inside your CMyView class, then you should simply do this:
CMyView newLine = ....;
It doesn't make any sense to have to use an instance of CMyView in order to instanciate a variable (pView->Line ).
|
|
|
|
|
mesajflaviu wrote: pView->Line data = pView->m_line.GetNext(pos); // here is an error :
What's wrong with
Line & line = pView->m_line.GetNext(pos);
?
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I solved in this way :
CMyView::Line structLine = pView->m_line.GetNext(pos);
I want to thank you all ! You are very kind ! I teach something here !!!
|
|
|
|
|
You are welcome.
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I have a VS C++ server app that listens for client tcp connections, maintains them in a table, and when the server app receives a message from an app it is a proxy for the server app sends the message to each tcp connection. There will be no more than five connections and the message rate is less than one per second.
Now I need to be able to also read any messages coming in from the clients over the same connection. So on one thread, the main one, I am receiving and forwarding msgs from the app I am proxy for to the clients; on another thread I am listening for any new connections; and now I would like to listen for client input from any of the connected clients on a 3rd thread using select(). I maintain a list of all my active connections.
Can anyone provide and example using select() that sketches out how to do this.
Thanks
|
|
|
|
|
Hi Alan! Here a couple of thoughts...
a) where's the difference between "the app" and the "server app", are these different processes?
b) you mention incoming sockets are maintained in a "table" later a "list", what kind of data structure is this?
c) what do you plan to do with the data from incoming clients, forward it to someone and how (callbacks, IPC, etc)?
d) do you have to use select(), well, you probably don't want to mix multi-threading and non-blocking sockets?
e) why do you start every new messages with "re:"?
Questions over questions
/Moak
|
|
|
|
|
Hi all
I have a big problem, when Windows Xp, Vista or Win7 enter in sleep/stand by mode, my software crash in restart.
I found where is the problem, the problem is in ribbon bar.
I have a MDI application based in ribbon Office 2007, but my mainframe run in another thread where is the ribbonbar and initialization. I have a derived class of CWinthread where is my CMainframe, this is necessary because of software type.
In my tests I found:
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
This I set in OnCreate() function of my Mainframe, in tests I can see that problem is only when I choose CMFCVisualManagerOffice2007, there are no problem for the others, Office 2003, XP, VS2005.
Im using in development environment WINXP, VS2008 SP1.
Anybody can help me? Do you have seen this before?
Thank you
|
|
|
|
|
You could try to empty the WM_POWERBROADCAST reaction of your frame (1, rudely)
or to debug the CMFCVisualManagerOffice2007::OnUpdateSystemColors() after the logon...
...to find the responsible for the crash line
and then - to derive your own class from Off2007VManager
with some overwritten virtualities (2)
virtual void BeHappy() = 0;
|
|
|
|
|
So, now the problem is how to use my derived class in MainFrame.
I can't use :
CMFCVisualManager::SetDefaultManager (RUNTIME_CLASS (CMFCMyVisualManagerOffice2007));
My application still crash.
|
|
|
|
|
// I can't use
Why ?
virtual void BeHappy() = 0;
|
|
|
|
|
Here is my derived class:
class CMFCMyVisualManagerOffice2007 : public CMFCVisualManagerOffice2007
{
DECLARE_DYNCREATE(CMFCMyVisualManagerOffice2007)
public:
CMFCMyVisualManagerOffice2007();
virtual ~CMFCMyVisualManagerOffice2007();
virtual void OnUpdateSystemColors()
{
m_bAutoFreeRes = bAutoFree;
}
};
IMPLEMENT_DYNAMIC(CMFCMyVisualManagerOffice2007, CMFCVisualManagerOffice2007)
So, in OnCreate of CMainframe:
CMFCMyVisualManagerOffice2007::SetStyle (CMFCMyVisualManagerOffice2007::Office2007_LunaBlue);
CMFCVisualManager::SetDefaultManager (RUNTIME_CLASS (CMFCMyVisualManagerOffice2007));// this line crash application
|
|
|
|
|
Does it crash at the initial starting or after the standby mode ?
Try to comment your implementation for virtual void OnUpdateSystemColors() firstly,
then, when it will not crash, try to modify it slowly, for example :
void COurVisualManagerOffice2007::OnUpdateSystemColors()
{
CYourApp* pcApp = (CYourApp*) AfxGetApp();
ASSERT(pcApp);
if (pcApp) {
switch (pcApp->m_nAppLook) {
case ID_VIEW_APPLOOK_OFF_2007_BLUE:
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
break;
case ID_VIEW_APPLOOK_OFF_2007_BLACK:
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
break;
case ID_VIEW_APPLOOK_OFF_2007_SILVER:
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
break;
case ID_VIEW_APPLOOK_OFF_2007_AQUA:
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
break;
}
}
CMFCVisualManagerOffice2007::OnUpdateSystemColors();
}
virtual void BeHappy() = 0;
|
|
|
|
|
Ok, this works in first time that I go in sleep/stand by mode.
In second time my application crash in the same way.
Im using Windbg to see stack.
Here is my stack, the problem happens in release/debug version.
02dcf92c 78bbdb80 mfc90u!AfxFindResourceHandle+0x15 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dllinit.cpp @ 237]
02dcf94c 78bb8b74 mfc90u!CPngImage::Load+0x2e [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxtoolbarimages.cpp @ 3141]
02dcf9f8 78b38b3d mfc90u!CMFCToolBarImages::LoadStr+0xca [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxtoolbarimages.cpp @ 199]
02dcfb20 78bd2e4e mfc90u!CMenuImages::SetColor+0x7e [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxmenuimages.cpp @ 111]
02dcfb50 78bd2d33 mfc90u!CMFCVisualManagerOffice2007::~CMFCVisualManagerOffice2007+0x27 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxvisualmanageroffice2007.cpp @ 305]
02dcfb5c 78bc4772 mfc90u!CMFCVisualManagerOffice2007::`scalar deleting destructor'+0xd
02dcfb6c 78b23736 mfc90u!CMFCVisualManager::SetDefaultManager+0x34 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxvisualmanager.cpp @ 159]
02dcfb80 78b20b95 mfc90u!AFX_GLOBAL_DATA::Resume+0x138 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxglobals.cpp @ 1254]
02dcfb8c 78a3f97c mfc90u!CFrameWndEx::OnPowerBroadcast+0x1d [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxframewndex.cpp @ 1164]
02dcfc3c 78a3f6ce mfc90u!CWnd::OnWndMsg+0x287 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp @ 1897]
02dcfc5c 78a3e2f4 mfc90u!CWnd::WindowProc+0x24 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp @ 1755]
02dcfcc4 78a3e580 mfc90u!AfxCallWndProc+0xa3 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp @ 240]
02dcfd2c 7e418734 mfc90u!AfxWndProc+0x37 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp @ 402]
02dcfd58 7e418816 USER32!InternalCallWinProc+0x28
02dcfdc0 7e428ea0 USER32!UserCallWinProcCheckWow+0x150
02dcfe14 7e428eec USER32!DispatchClientMessage+0xa3
02dcfe3c 7c90e473 USER32!__fnDWORD+0x24
02dcfe60 7e4193e9 ntdll!KiUserCallbackDispatcher+0x13
02dcfe8c 7e419402 USER32!NtUserPeekMessage+0xc
02dcfeb8 78a7ea72 USER32!PeekMessageW+0xbc
02dcfeec 78a7e337 mfc90u!CWinThread::Run+0x86 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp @ 640]
02dcff70 78543433 mfc90u!_AfxThreadEntry+0x10c [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp @ 126]
02dcffa8 785434c7 MSVCR90!_callthreadstartex+0x1b [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 348]
02dcffb4 7c80b729 MSVCR90!_threadstartex+0x69 [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 326]
02dcffec 00000000 kernel32!BaseThreadStart+0x37
|
|
|
|
|
Hmm...
...may be, it is not correctly to process AFX_GLOBAL_DATA::Resume()
since it was initialized by the main thread (that is not my case).
So you can empty/redirect CYourMainFrame::OnPowerBroadcast(..)
without the call of CFrameWndEx::OnPowerBroadcast(..) ...
virtual void BeHappy() = 0;
|
|
|
|
|
Hi all.
Can we create DSN Name and set a datadase path through Install shield 2010.
i.e I dont want to create DSN name going through Control Panel->ODBC
and then select .mdb file and create DSN Name and selecta database path
Any ideas will be helpful
I dont know,is this the right forum for this question.
Thanks
Raj
|
|
|
|
|
How is this a C/C++/MFC question?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|