|
Check to make sure that all your new and deletes match up. Make sure that if you are allocting arrays with new that you use the delete [] syntax.
Visual C++ is fairly good at tracking the memory leaks of objects. Does it give you memory leak information in the debug output window when your app exits. It usually shows the data that hasn't been freed. This will give you a starting point where to look.
hope this helps,
Michael
|
|
|
|
|
Hello all,
I am trying to build a dialog type app that uses a irregular shaped bmp for the dialog box.. I download the source code from http://www.codeguru.com/dialog/IrrBmpDlg.html The source code works very well it really makes your app look very nice. The only problem I see is if you change your desktop settings to "Large Fonts" the bitmap is displayed the regular size while the Dialog box is enlarged. You end up with a bunch of controls that don't appear to be part of the application they look like they are out in the open.. Would anyone be willing to check out his source code and help me come up with a solution to this? I have emailed the author but I haven't received any replies. I thought maybe someone else might have run across a similar type situation.
Thanks in advance,
Rob
|
|
|
|
|
How can I create a multidimensional array of int's (or whatever) when I don't know the dimensions at compile time? I've tried alot of stuff, but the compiler still hasn't accepted any of my desperate tries. Please help me...
In my case, I want the user to decide at runtime the lenght and width of a labyrint, that should be generated afterwards. I'm aware that there are other alternatives to multidimensional arrays, and I'm open to other good suggestions too.
Sprudling
|
|
|
|
|
This is the best I've managed to do so far...
#include "iostream.h"
int main(int argc, char* argv[])
{
int nA = 5;
int nB = 4;
int** a = new int*[nA];
for (int i1 = 0; i1 < nA; i1++)
{
a[i1] = new int[nB];
}
for (i1 = 0; i1 < nA; i1++)
{
for (int i2 = 0; i2 < nB; i2++)
{
a[i1][i2] = (i1 * nB) + i2;
}
}
for (i1 = 0; i1 < nA; i1++)
{
for (int i2 = 0; i2 < nB; i2++)
{
cout << "[" << i1 << "][" << i2 << "] : " << a[i1][i2] << endl;
}
}
for (i1 = 0; i1 < nA; i1++)
{
delete[] a[i1];
}
delete[] a;
return 0;
}
It seems to work ok, but there is alot of code just for creating an array, and I'll have to keep track of the size of the 1. dimension of the array, and that's not always simple.
Isn't there a better way?
Sprudling
|
|
|
|
|
The way you're doing it is the correct way.
--Mike--
http://home.inreach.com/mdunn/
Ford: How would you react if I said that I'm not from Guildford after all, but from a small planet somewhere in the vicinity of Betelguese?
Arthur: I don't know. Why, do you think it's the sort of thing you're likely to say?
|
|
|
|
|
this is the perfect place for some cool template code
any takers?
|
|
|
|
|
What if I want like 10 different arrays with 10 or more dimensions? That would be alot of code. And are you telling me that C++ hasn't support for dynamic multidimensional arrays?! If so, I'm sure this has been a "problem" for a long time, and someone must have come up with something... A quick and easy general way to create arrays of N dimensions. If there exist one, I really want to know
Sprudling
|
|
|
|
|
here you go man i think it is the best way to do that
int main()
{
double (* pX)[4];
pX = new double [3][4];
delete [] pX;
return 0;
}
|
|
|
|
|
I'm looking to write some custom controls that have a "Timeline" type control with a tree-list view controlling content held within a timeline.
ie
http://www.adobe.com/products/premiere/keyfeature07.html
http://moppi.inside.org/demopaja/screenshot_02.gif
Basically, I am having troubles with the tree-list view portion of the appliccation. It seems that there is a tree-list control controlling the timeline content which holds time markers and information.
Am I off base here, or what? Any resources on the web or ideas?
Thanks
-JT
|
|
|
|
|
Wow. I'm just about to start coding something almost exactly similar, and was wondering the same thing. My guess is that the tree list portion is custom coded, and not really derived from treectrl.
Let me know if you find out anything... I'll start lookin around too.
|
|
|
|
|
How do I Terminate a process that is already running ?
In Short....
if(ProcessNotRunning)
{
CreateProcess(..);
}
else
{
// Process is already running
// Now to terminate it later I require a handle how do I get tht ???
}
......
......
TerminateProcess(prInfo.hProcess,0);
HELPPP!!!!!
|
|
|
|
|
The last parameter of the CreateProcess() will provide you with all the handles and information you need.
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
...
...
.....
lpProcessInformation
Pointer to a PROCESS_INFORMATION structure that receives identification information about the new process.
cheers
It is Illogical to define an inventor by his invention
|
|
|
|
|
But in case the Process is already running .. m not goin to use createProcess .. then ????
|
|
|
|
|
I'm having trouble while trying to share my string resources defined in an extension DLL when it gets used within a MFC client app. It appears to work if the string resources are assigned some specific values!!
Here's the concrete illustration of the problem :-
static AFX_EXTENSION_MODULE GOLDLL = { NULL, NULL };
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason) {
case DLL_PROCESS_ATTACH:
TRACE(_T("GOL.dll is initializing\n"));
// Extension DLL one-time initialization
if (!AfxInitExtensionModule(GOLDLL, hInstance))
return 0;
// Insert this DLL in the resource chain
//new CDynLinkLibrary(GOLDLL);
break;
//...
}
GOLInit creates a new CDynLinkLibrary object to add it to the library chain & this function gets called within the client app.
extern "C" void WINAPI
GOLInit()
{
static bool firstTime = true;
// Insert this DLL into the resource chain
if (firstTime) {
new CDynLinkLibrary(GOLDLL);
firstTime = false;
}
}
// This is from the resource file in the extension DLL & is the string resource that
// i'm interested in sharing with the client app.
#define IDS_XXX_CTRL 61500
The funny thing is that if i renumber the IDS_XXX_CTRL as 61440, the client app finds the resource but if it is defined as 61500 it doesn't find it. I stepped thru AfxLoadString & noticed that the GOLDLL module is part of the chain & yet the FindResource call fails. Any ideas what else i should check?? i've ran out of ideas & steam!
TIA
Chen Venkataraman
|
|
|
|
|
Why do you have GOLInit function? Did you have any problems with CDynLinkLibrary created in DllMain?
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
To allow for both implicitly & explicitly linked DLLs chain correctly.
Anyway, i tried moving the code to DLLMain & also tried doing at both places (DllMain as well as a separate exported function) with the same result. Same strangeness! still
|
|
|
|
|
Sirs,
I am about to create an SDI splitter app but
there are some unclear points to me.
First I created a splitter with 1 row and 2 coloums (both coloums
with a CView in them, CFirstView
and CSecondView) by using
m_wndSplitter.CreateStatic and
m_wndSplitter.CreateView
in the CMainFrame::OnCreateClient.
So far so good.
Now I want to create in CSecondView two further
rows, and place a property sheet in one of them.
Problem 1 is that being a view there is no CFrameWnd::OnCreateClient
within CSecondView, where CreateStatic
and CreateView are supposed to be placed.
Problem 2 is how to create a property sheet with
CreateView, or at least a CDialog on
which property pages could be placed.
I also tried (for 1 row 2 cols) deriving
from CFormView instead of CView but
it asserts ("Invalid Dialog Template"
in MFC/ViewForm.cpp). With CPropertySheet also
asserts ("Panes can be a CWnd but are usually CViews"
in MFC/Winsplit.cpp).
By deriving from CWnd
or CDialog it does not even compile (RUNTIME_CLASS:
"classCFirstView is not a member of CFirstView"
in m_wndSplitter.CreateView )
Your experience would be highly
appreciated. Thank you in advance.
Bunburry
Education is an admirable thing but it is well to remember from time to time that nothing that is worth knowing can be taught (O.Wilde)
|
|
|
|
|
I never trie a Property, but for any other king of view this code work ok.
BOOL CChildFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)
{
// create a splitter with 1 row, 2 columns
if (!m_wndSplitter.CreateStatic(this, 1, 2))
{
TRACE0("Failed to CreateStaticSplitter\n");
return FALSE;
}
m_wndSplitter.SetScrollStyle( 0 ); //Use frame scroller
// Create view in first splitter Row 0, COl 0
if (!m_wndSplitter.CreateView(0, 0,
RUNTIME_CLASS(CArchivoTreeView), CSize(130, 50), pContext))
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
// Create nested splitter in second col of first splitter
if (!m_wndSplitterRE.CreateStatic(
&m_wndSplitter, // our parent window is the first splitter
2, 1, // 2 rows 1 col
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL, // style, WS_BORDER is needed
m_wndSplitter.IdFromRowCol(0, 1) ))
{
TRACE0("Failed to create nested splitter\n");
return FALSE;
}
m_wndSplitterRE.SetScrollStyle( 0 );
// Create view in first row of second splitter
if (!m_wndSplitterRE.CreateView(0, 0,
RUNTIME_CLASS(CHeaderInfo), CSize(80, 65), pContext))
{
TRACE0("Failed to create first pane\n");
return FALSE;
}
// Create view in second row of second splitter
if (!m_wndSplitterRE.CreateView(1, 0,
RUNTIME_CLASS(CFileView), CSize(0, 0), pContext))
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
// TODO
}
|
|
|
|
|
I've created a CDialog based application from which I call a property sheet containing a single property page. This property page contains a single CComboBox control set in dropdown mode. If I display the property sheet and drag it to a position where it overlaps both the application dialog and the background, a portion of the property sheet is filled with whatever lies in the background. This behavior is seen only the first time the property sheet is displayed(but each time the application is restarted) and when "Show window contents while dragging" option of the Control panel/display setting/plus! is disabled!!!
====How to reproduce===
Ok, here's the "for dummies" procedure.
1) Create an MFC AppWizard project named "test"
2) Make it dialog based and keep all other default settings
3) Open the dialog
4) Remove the OK/CANCEL buttons and the "TODO:..." static
5) Set the dialog size to 500x250 (yes, if too small, problem won't show)
6) Insert a new button (IDC_BUTTON1)
7) In class Wizard, add a onButton1() function in CTestDlg
8) Insert an IDD_PROPPAGE_MEDIUM dialog in your project
9) Delete the "TODO:..." static of the property page dialog
10) Add a combo box control to the property page dialog
11) In class wizard, create the new class "cproppage" based on CPropertyPage and dialog IDD_PROPPAGE_MEDIUM
12) Using class wizard, create a new class "cpropsheet" based on CPropertySheet.
13) In the TestDlg.h file, add #include "cproppage.h" and #include "cpropsheet.h"
14) In the TestDlg.h file, add private member "cproppage proppage" to class CTestDlg
15) In the TestDlg.cpp file, in the onButton1() function, add:
cpropsheet lDlg("test");
lDlg.AddPage(&proppage);
lDlg.DoModal();
16) That's it! Compile it, run it.
17) Do not move the application dialog
18) Press the button (the property sheet is displayed)
19) Drag the property sheet such that it overlaps the dialog border (try half/half)
20) Release mouse button
21) Voila! Portion of property sheet refreshed with background!!!!
If a control other than the Combo box is used, there is no problem...
What is happening?
Thanks to all!
==Carl==
|
|
|
|
|
I have a strange one.
I have my own CTreeCtrl for doing multi-select. When build/run a debug version it works just fine. When I build/run a release version, my tree nodes get populated, but I do not see any + on the parent nodes and cannot expand them to see the children. But I can do all that in the debug version without a problem.
Any Ideas?
-kg
// *** TreeView
CMulSelTreeCtrl* pMyTree = (CMulSelTreeCtrl*) GetDlgItem(IDC_TREE1);
ASSERT(pMyTree != NULL);
pMyTree ->DeleteAllItems();
pMyTree ->ModifyStyle(NULL, TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS);
// Associate the image list with the tree control.
pMyTree ->SetImageList(pilMyTree, TVSIL_NORMAL);
TVINSERTSTRUCT tvInsert;
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT | TVIF_CHILDREN;
// *** TreeView
tvInsert.item.pszText = _T(buffer);
HTREEITEM hTreeItem = pMyTree ->InsertItem(&tvInsert);
Ken Goguen
Principle Design Engineer
EMC Corporation
|
|
|
|
|
Init your structs to zero before using them:
TVINSERTSTRUCT tvInsert = {0};
--Mike--
http://home.inreach.com/mdunn/
Ford: How would you react if I said that I'm not from Guildford after all, but from a small planet somewhere in the vicinity of Betelguese?
Arthur: I don't know. Why, do you think it's the sort of thing you're likely to say?
|
|
|
|
|
Good practice, but didn't resolve the problem.
-kg
Ken Goguen
Principle Design Engineer
EMC Corporation
|
|
|
|
|
The code you've posted only inserts a root item. And TVIF_CHILDREN flag is ignored during inserts. It works when you're getting information about the item with GetItem.
BTW: why are you using a InsertItem overload that takes TVINSERTSTRUCT - there are more convenient versions.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
There is additional code that adds the other nodes, but using message windows I've been able to determine that the expand problem occurs on the first insert.
Only using the overload as it was part of an old example I began with. Do you think this could be part of the problem?
-kg
Ken Goguen
Principle Design Engineer
EMC Corporation
|
|
|
|
|
There are many fields in TVITEM struct, which is a member of TVINSERTSTRUCT. You may have overlooked one of them. Give other overloads a try - they are easier to use and understand.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|