|
Neelesh K J Jain wrote:
What is the main advantage of Virtual destructor?
Imagine you have one base class (CBase) and one derived class (CChild that inherits from CBase). Now look at this piece of code:
CBase* pPtr = new CChild;<br />
....<br />
...<br />
delete pPtr;
Now, what would happens if the destructor wasn't virtual ? The only destructor that will be called is the destructor of the base class (pPtr is a pointer of type CBase*) and so your object may be not completelly cleaned. So, if you make your destructor virtual, the destructor of CChild will be called.
Neelesh K J Jain wrote:
Why don't we have virtual constructor when virtual destructor's are present?
Because when you create an instance of an object (like in the piece of code before), you know exactly which kind of class (CChild or CBase) you want to create. In fact this line: CBase* pPtr = new CChild can be explained as: first create an object of type CChild (the compiler knows exactly that he will need to call the constructor of CChild) and then store this pointer in pPtr.
So, here, no need for virtual constructors...
Hope this helps
|
|
|
|
|
dear all seniors:
I have a control about the use mouse to select an area , but I can't clear all the unselect area. There is some vestigital shadow when move the mouse from right to left.I don't have any idea to avoid this case. Please give me a hand, thank you very much. The code as beloow :
<br />
<br />
#if !defined(AFX_TESTMOUSEVIEW_H__25EE68BB_BD4B_4C4E_8731_90C45792A08E__INCLUDED_)<br />
#define AFX_TESTMOUSEVIEW_H__25EE68BB_BD4B_4C4E_8731_90C45792A08E__INCLUDED_<br />
<br />
#if _MSC_VER > 1000<br />
#pragma once<br />
#endif // _MSC_VER > 1000<br />
<br />
<br />
class CTestmouseView : public CView<br />
{<br />
protected:
CTestmouseView();<br />
DECLARE_DYNCREATE(CTestmouseView)<br />
<br />
public:<br />
CTestmouseDoc* GetDocument();<br />
CRect SelectArea,DisSelectArea;<br />
<br />
public:<br />
<br />
public:<br />
virtual void OnDraw(CDC* pDC);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);<br />
protected:<br />
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);<br />
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);<br />
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);<br />
<br />
public:<br />
virtual ~CTestmouseView();<br />
#ifdef _DEBUG<br />
virtual void AssertValid() const;<br />
virtual void Dump(CDumpContext& dc) const;<br />
#endif<br />
<br />
protected:<br />
<br />
protected:<br />
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);<br />
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);<br />
afx_msg void OnMouseMove(UINT nFlags, CPoint point);<br />
DECLARE_MESSAGE_MAP()<br />
};<br />
<br />
#ifndef _DEBUG // debug version in testmouseView.cpp<br />
inline CTestmouseDoc* CTestmouseView::GetDocument()<br />
{ return (CTestmouseDoc*)m_pDocument; }<br />
#endif<br />
<br />
<br />
<br />
#endif // !defined(AFX_TESTMOUSEVIEW_H__25EE68BB_BD4B_4C4E_8731_90C45792A08E__INCLUDED_)<br />
<br />
<br />
#include "stdafx.h"<br />
#include "testmouse.h"<br />
<br />
#include "testmouseDoc.h"<br />
#include "testmouseView.h"<br />
<br />
#ifdef _DEBUG<br />
#define new DEBUG_NEW<br />
#undef THIS_FILE<br />
static char THIS_FILE[] = __FILE__;<br />
#endif<br />
<br />
<br />
IMPLEMENT_DYNCREATE(CTestmouseView, CView)<br />
<br />
BEGIN_MESSAGE_MAP(CTestmouseView, CView)<br />
ON_WM_LBUTTONDOWN()<br />
ON_WM_LBUTTONUP()<br />
ON_WM_MOUSEMOVE()<br />
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)<br />
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)<br />
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)<br />
END_MESSAGE_MAP()<br />
<br />
<br />
CTestmouseView::CTestmouseView()<br />
{<br />
SelectArea = CRect(0,0,0,0);<br />
DisSelectArea = SelectArea;<br />
}<br />
<br />
CTestmouseView::~CTestmouseView()<br />
{<br />
}<br />
<br />
BOOL CTestmouseView::PreCreateWindow(CREATESTRUCT& cs)<br />
{<br />
<br />
return CView::PreCreateWindow(cs);<br />
}<br />
<br />
<br />
void CTestmouseView::OnDraw(CDC* pDC)<br />
{<br />
CTestmouseDoc* pDoc = GetDocument();<br />
ASSERT_VALID(pDoc);<br />
CBrush WhiteBrush(RGB(255,255,255));<br />
CBrush LightGaryBrush(RGB(225,225,225));<br />
CBrush *OldBrush;<br />
<br />
if(DisSelectArea.Width() != 0)<br />
{<br />
OldBrush = pDC->SelectObject(&WhiteBrush);<br />
pDC->FillRect(DisSelectArea,&WhiteBrush);<br />
pDC->SelectObject(OldBrush);<br />
}<br />
if(SelectArea.Width() != 0)<br />
{<br />
OldBrush = pDC->SelectObject(&LightGaryBrush);<br />
pDC->FillRect(SelectArea,&LightGaryBrush);<br />
pDC->SelectObject(OldBrush);<br />
}<br />
}<br />
<br />
<br />
BOOL CTestmouseView::OnPreparePrinting(CPrintInfo* pInfo)<br />
{<br />
return DoPreparePrinting(pInfo);<br />
}<br />
<br />
void CTestmouseView::OnBeginPrinting(CDC* , CPrintInfo* )<br />
{<br />
}<br />
<br />
void CTestmouseView::OnEndPrinting(CDC* , CPrintInfo* )<br />
{<br />
}<br />
<br />
<br />
#ifdef _DEBUG<br />
void CTestmouseView::AssertValid() const<br />
{<br />
CView::AssertValid();<br />
}<br />
<br />
void CTestmouseView::Dump(CDumpContext& dc) const<br />
{<br />
CView::Dump(dc);<br />
}<br />
<br />
CTestmouseDoc* CTestmouseView::GetDocument()
{<br />
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestmouseDoc)));<br />
return (CTestmouseDoc*)m_pDocument;<br />
}<br />
#endif //_DEBUG<br />
<br />
<br />
void CTestmouseView::OnLButtonDown(UINT nFlags, CPoint point) <br />
{<br />
SetCapture();<br />
SelectArea.left = point.x;<br />
SelectArea.top = point.y;<br />
SelectArea.right = point.x;<br />
SelectArea.bottom = point.y+ 50;<br />
}<br />
<br />
void CTestmouseView::OnMouseMove(UINT nFlags, CPoint point) <br />
{<br />
if(nFlags == MK_LBUTTON)<br />
{<br />
if(point.x >= SelectArea.left)<br />
{<br />
if( point.x >= SelectArea.right)<br />
{<br />
SelectArea.right = point.x;<br />
}<br />
else if( point.x < SelectArea.right)<br />
{<br />
DisSelectArea.left = point.x;<br />
DisSelectArea.top = SelectArea.top;<br />
DisSelectArea.right = SelectArea.right;<br />
DisSelectArea.bottom = SelectArea.bottom;<br />
SelectArea.right = point.x;<br />
}<br />
}<br />
else if(point.x < SelectArea.left)<br />
{<br />
if(point.x < SelectArea.right)<br />
{<br />
SelectArea.right = point.x;<br />
}<br />
else if(point.x > SelectArea.right)<br />
{<br />
DisSelectArea.left = point.x;<br />
DisSelectArea.top = SelectArea.top;<br />
DisSelectArea.right =SelectArea.right;<br />
DisSelectArea.bottom = SelectArea.bottom;<br />
SelectArea.right = point.x;<br />
}<br />
}<br />
}<br />
InvalidateRect(DisSelectArea,FALSE);<br />
InvalidateRect(SelectArea,FALSE);<br />
UpdateWindow();<br />
}<br />
void CTestmouseView::OnLButtonUp(UINT nFlags, CPoint point) <br />
{<br />
ReleaseCapture();<br />
SelectArea.right = point.x;<br />
}<br />
|
|
|
|
|
I am trying to extract an embedded object from a RTF file.
I can extract the embedded object tag and corresponding data from the original RTF file, but I don't know how to make that into its own object outside of the RTF.
Any help would be appreciated.
|
|
|
|
|
how can i use file dll in visual c++ and open it to use it's contents
|
|
|
|
|
Are you wanting to know how to use exported functions or classes from the DLL?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
yes please......
by visual c++
|
|
|
|
|
You would need to load the DLL using LoadLibrary() . With the returned handle, you would then make a call to GetProcAddress() to get the address of the exported function. See here for an example.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
How can I use colors to make text of the console application look pretty with VC++.Net?
|
|
|
|
|
Here’s the easiest way to set the default console foreground and background colors from a .NET console application:
Serge
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
// paint in red on black:
::system("COLOR 04");
std::cout << "Hello, World!" << std::endl;
return 0;
}
/*
C:>color /?
Sets the default console foreground and background colors.
COLOR [attr]
attr Specifies color attribute of console output
Color attributes are specified by TWO hex digits -- the first
corresponds to the background; the second the foreground. Each digit
can be any of the following values:
0 = Black 8 = Gray
1 = Blue 9 = Light Blue
2 = Green A = Light Green
3 = Aqua B = Light Aqua
4 = Red C = Light Red
5 = Purple D = Light Purple
6 = Yellow E = Light Yellow
7 = White F = Bright White
If no argument is given, this command restores the color to what it was
when CMD.EXE started. This value either comes from the current console
window, the /T command line switch or from the DefaultColor registry
value.
The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute
the COLOR command with a foreground and background color that are the
same.
Example: "COLOR fc" produces light red on bright white
*/
|
|
|
|
|
I want to make "Visual C++ Components" for VC++ 6.
Like: predefined "Pop-up Menu"
Thanks
|
|
|
|
|
Hi !
I have a problem. I had created a service with a trayicon which has a popupmenu. The popupmenu items generated dinamically.
My problem that I need to set the language of the popupmenu. What I mean under the language, what I can retrieve with : GetKeyboardLayout.
I can set it in case of a form with : LoadKeyboardLayout , but for some reason it is NOT working for the popupmenu.
Could somebody help me please ?
Thanks a lot in advance,
Moore
|
|
|
|
|
The pop-up menu has nothing to do with the KeyboardLayout.
Make different string resources, one for each language you want to use, and use the
appropriate one (depending on the language selection).
SkyWalker
|
|
|
|
|
Hello.
I am using the registry for a program in the following manner:
sprintf(szBuffer, "%f", Value)
AfxGetApp()->WriteProfileString("NAME", "SECTION", szBuffer)
Value in the sprintf call is a double. I have to allocate space with szBuffer as:
char szBuffer[sizeof(double)*2], in order to get the program to run properly.
But, I have a run time error if I try:
char szBuffer[sizeof(float)]
I dont understand why I get the error. Can anyone help me out?
All I want to do is to save Value as a string and read it back as a string.
Thanks,
Jerry
|
|
|
|
|
You have to allocate enough space to hold the representation of the double or float. Not the size of a double or float. eg. Suppose the value is 1234, then you need five bytes. But if the value is 1234567890.1234567890, you will need twenty two bytes.
Chris Meech
I am Canadian. [heard in a local bar]
Gently arching his fishing rod back he moves the tip forward in a gentle arch releasing the line.... kersplunk [Doug Goulden]
Nice sig! [Tim Deveaux on Matt Newman's sig with a quote from me]
|
|
|
|
|
jerry1211a wrote:
sprintf(szBuffer, "%f", Value)
Use MFC constructs when available:
CString strBuffer;
strBuffer.Format("%f", Value);
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
How can I force the open dialog to open with a specific path every time?
thanks,
|
|
|
|
|
Set the lpstrInitialDir field of the m_ofn member of CFileDialog prior to calling CFileDialog::DoModal. If you want the dialog that is shown when the user uses the Open item on the File menu in a standard MFC program you have to dig into the doc/view architechture. There was a post about this earlier, that was about the Save dialog buts it's the same story.
cheers
Steen
|
|
|
|
|
I've implemented a wizard using the CPropertySheet and CPropertyPage classes.
When i'm in a particular page of the wizard, when i click the "Cancel" button or press ESC or close the page by clicking on the "X" in the right top corner, the CANCEL message gets fired and control comes to the OnCancel command handler. At this point the PSN_WIZFINISH notification is not sent.
void CMyPropertyPage::OnCancel()
{
ASSERT(m_pSheet != NULL);
m_pSheet->EndDialog(IDCANCEL);
}
Now I have a scenario where i have to forcefully close the wizard by sending
SendMessage(WM_COMMAND,IDCANCEL);
Now after the CANCEL message being sent, the PSN_WIZFINISH notification is also sent .
In my class, i've overridden the OnWizardFinish to do some functionality.. So when i do a "SendMessage" i dont want the PSN_WIZFINISH to be sent ..
why does it work this way and how do i avoid it ?
|
|
|
|
|
Look up WM_COMMAND in MSDN to learn how to properly format a WM_COMMAND message. The wParam and lParam parameters have special meanings that you are ignoring.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it! Honoured as one of The Most Helpful Members of 2004
|
|
|
|
|
how to find client and workgroup in mfc
|
|
|
|
|
http://www.codeproject.com/internet/caanetadminclass.asp
|
|
|
|
|
I have a variety of codecs on my machine as well as a variety of encoded avi files. I've written a fairly simple media player using MS's MCIWnd class. While it works with some files, I've had problems with xvid and divx encoded files. In particular, I've gotten dropped frames with no sound in some cases and sound with no video in others. When using Windows Media Player, all of these files play back correctly. My understanding was the codec support is transparent, i.e. I can tell MCIWnd to play a file and as long as the container and codec are recognized, it should work. Am I missing something?
The other approach I'm trying is using an ActiveX media player control. It seems to work a bit better, but the documentation is non-existent. VC dropped in a class called CWMPMedia. While I can see the functions in the IDE, I'm not quite sure what all of them do. Take GetImageSourceHeight() or GetMarkerCount() for example. Also as I'm trying to make my media player an ActiveX control, I had to create a dialog and insert the Windows Media Player control on that dialog. My control puts the WMP control right onto the container -- I don't use the dialog. Is there a way to add a graphical control to a VC project without dropping it onto a dialog? Since I'm not using the dialog, it seems extraneous.
I'm curious about both approaches, so any info on either or both would be great!
Thanks all,
David
|
|
|
|
|
This should be an easy question. I have a CListCtrl
in report view. I put together alittle function to
swap two rows in the CListCtrl. Works great.
My problem is, how can I programmatically make the
active row retain that blue, highlighted color? When
I swap rows, the selected row in blue goes away. The
user has to click on the CListCtrl to make that blue-
ness reappear.
I tried:
int sel = m_list1.GetSelectionMark();
m_list1.SetSelectionMark(sel);
m_list1.SetHotItem(sel);
but neither makes the blue reappear. I tried a few other
commands as well. Whats the magic command? Please,
any response any one can give me will be greatly
appreciated.
Sincerely,
Danielle Brina (an overworked graduate student)
|
|
|
|
|
m_list1.SetFocus();
Took me forever. I tried every command there was.
|
|
|
|
|
Hi,
I'm trying to debug an ATL Server project and when I try attach to the dllhost process an "Access Denied" error appears. I'm using Visual Studio 2003 and Windows 2000 SP4. I've been looking in the internet for two days and I've tried all that I found about this topic (I checked the impesonation and the debug programs policies, the "Machine Debugger Manager" service, I verified that I was in the local "Administrators" group, the security of the directories where my DLLs are). I can't find anything else to verify. I would really appreciate if somebody can help me in any way, at least telling me what else could I check.
Thanks,
Federico
|
|
|
|