|
Is there anyway to force a window created using this command to stay on top of its parent window at all times (kind of app modal)?
However, I have a problem with when other windows overlap the parent window of my message. This message sort of pops up in front of the new dialog as well..
Any solutions?
|
|
|
|
|
Did you try with setting pParentWnd parameter of CFrameWnd::Create to AfxGetMainWnd()?
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
Or did you try with setting pParentWnd parameter to NULL?
|
|
|
|
|
I have written a dll that acts as a central location for a specific data set. I've set the following declaration:
#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)
#else
#define EXPORT __declspec(dllexport)
#endif
My problem is this. I have an array of data that is built and maintained within the DLL. I have a function that returns a pointer to that data set (array). Upon shutdown of the application, I get the following error:
"dbgheap.c line 1011 _CrtIsValidHeapPoint, or an error accessing the heap"
The trace in debug dumps this:
"Heap Block at c50038 modified at c572e0 past requested size of 72a0"
What I believe is happening is the application tries to clean up, but the memory for this data pointer I have is located in the DLL heap, i.e., not local to the app, causing this error.
I thought I could just free the point in the application and all would be fine, but this is not working at all.
Any suggestions? I have no idea on this one. I thought it might be how I'm declaring the function, or dll as stated above, but that doesn't fix the issue.
Any help is GREATLY Appreciated as I am really lost here. Thanks.
Dan
|
|
|
|
|
It seems that you're freeing blocks allocated on another heap. Are you using C runtime in static library?
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
If you want to allocate memory in a Dll and free this memory elsewhere you can use a GlobalAlloc / GlobalFree ( with the GMEM_FIXED flag you only have to change the alloc and the free lines ).
|
|
|
|
|
Hi
I issued this problem week ago but I still haven't solved it. Now I know a bit more about the nature of the problem. I created MFC program (dialog application) and I'm trying to execute such code:
CBitmap Bitmap;<br />
int a = 0;<br />
SetLastError(0);<br />
a = GetLastError();<br />
if( !Bitmap.LoadBitmap( IDB_BITMAP1 ) ) MessageBox("loadbitmap");<br />
a = GetLastError();<br />
SetLastError(0);<br />
if( !OpenClipboard() ) MessageBox("openclipboard");<br />
a = GetLastError();<br />
SetLastError(0);<br />
if( !EmptyClipboard() ) MessageBox("emptyclipboard");<br />
a = GetLastError();<br />
SetLastError(0); <br />
if( !SetClipboardData( CF_BITMAP, Bitmap ) ) MessageBox("setclipboarddata");<br />
a = GetLastError();<br />
SetLastError(0);<br />
if( !CloseClipboard() ) MessageBox("closeclipboard");<br />
a = GetLastError();<br />
SetLastError(0);<br />
Everything works perfect under Win2000, but under Win98 not, so I installed VC6.0 under Win98 to examine the problem. I don't get any runtime errors, program executes smoothly, but when I try to paste from clipboard (in Paint) nothing appears. When I execute my code for second time Paint shows message "Error in acquiring data from clipboard" (that's my translation from polish version of Windows, so it can be a bit different in english version). Someone advised me to empty clipboard before pasting but it doesn't help Anyone have any clue (this is quite urgent unfortunately). Thanks in advance.
Greetings
Mariusz Popiolek
|
|
|
|
|
I discover something. This problem is not connected with clipboard. When I tried to use Bitmap in another way (I made a Static of type bitmap) it also didn't work, but of course on Win2000 it works:
m_Image.SetBitmap( Bitmap );
Static image is changing on Win2000, on Win98 nothing happens. I don't have any idea
greetings
Mariusz Popiolek
|
|
|
|
|
In your previous example, 'Bitmap' variable was local. And CBitmap destructor deletes the bitmap, so handle passed to m_Image becomes invalid.
What happens on W2K when you invalidate the static window? Does it still show the picture?
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
You are right! But I found this solution on my own when I remembered that it helped a time ago when I was trying to set icons in a CTreeCtrl (of course it was your hint if I remember well, thanks once again). After invalidation picture dissapears on Win2000. When I made Bitmap global on win98 finally bitmap works properly. Thanks anyway, but do you know why this problem occurs (I mean why Win98 behaves different from Win2000 in such basic thing in my opinion).
Greetings
Mariusz Popiolek
|
|
|
|
|
Mariusz Popiolek wrote:
mean why Win98 behaves different from Win2000 in such basic thing
Probably W2K invalidates/updates window right after STM_SETIMAGE.
So you were able to fix the problem with clipboard as well?
Tomasz Sowinski -- http://www.shooltz.com
*** Si fractum non sit, noli id reficere. ***
|
|
|
|
|
Yes, after a long period of time (I noticed this issue on previous sunday I suppose), but I wasn't really trying to solve it (I was doing more urgent things, but finally I had to fix it). Now my VBA program works correctly on Win98 and Win2000 (I'm using clipboard to create custom toolbar icons in MSOffice, as far as I know that's the only way and the first thought which came to my mind was to do this in dll, so I can combine bitmaps in one dll).
Greetings
Mariusz Popiolek
|
|
|
|
|
I defined 2 classes - A and B;
class A {
public:
B GetB() {
return B();
}
};
class B {
public:
A GetA() {
return A();
}
};
since both classes make use of eachother, i get an "error C2501: 'A::B' : missing storage-class or type specifiers" when I try to compile.
Is this sort of thing supported with C++?
|
|
|
|
|
Someone else may give a better example but this is possible through inheritance.
class A
{
protected:
int Age;
int GetAge()
{
return Age;
}
};
class B:A
{
int f;
void Foo();
};
Access to the variable Age is available as B inherits A
B b;
b::A.Age;
Nick Parker
The goal of Computer Science is to build something that will last at least until we've finished building it. - Unknown
|
|
|
|
|
use a forward declaration:
class B;
class A
{
public:
B GetB();
};
class B
{
public:
A GetA();
};
and put implementation in the .cpp file
|
|
|
|
|
The class B isn't defined at the point you're trying to use it:
class A {
public:
B GetB() { return B(); } <font color=red>
}; thus you get the error. Add a forward declaration of B so the compiler knows what it is:
class B;
class A { ...
--Mike--
Just released - 1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
use a forward declaration of class B.
class B;
class A
{
public:
B GetB() {
...
}
class B
{
A GetA () {
...
}
CPUA 0x5041
Sonork 100.11743 Chicken Little
"So it can now be written in stone as a testament to humanities achievments "PJ did Pi at CP"." Colin Davies
Within you lies the power for good - Use it!
|
|
|
|
|
At the point where you define class A compiler knows nothing about identifier B, that's why error occurs. Put this before declaration of A:
class B;
Now compiler knows that B is a class, but that's not all. To return B from function compiler must know declaration of B, so you have to return pointer to B, not object B(when compiler see pointer to class, it doesn't have to know declaration of this class). Also you can't call constructor of B at this point, so just declare function in a class A and make a definition after a declaration of class B.
Greetings
Mariusz Popiolek
|
|
|
|
|
LOL!
It's like a whole class full raising their
hands all at once 'cause it's one of the
answers everyone has just waiting for an
opportunity to get out.
|
|
|
|
|
Yeah well, what can I say. It was an easy question and I need to get my post count up a little
CPUA 0x5041
Sonork 100.11743 Chicken Little
"So it can now be written in stone as a testament to humanities achievments "PJ did Pi at CP"." Colin Davies
Within you lies the power for good - Use it!
|
|
|
|
|
When I have seen this question there wasn't any answers, but when I finished answering the post(I tried the code in VC to be sure if it's working), there was already plenty of answers .
Greetings
Mariusz Popiolek
|
|
|
|
|
To avoid this error, you can 'forward declare' class B.
class B;
class A
{
public:
B GetB() { return B(); }
};
class B
{
public:
A GetA() { return A(); }
};
Roger Stewart
"I Owe, I Owe, it's off to work I go..."
|
|
|
|
|
|
I have listctrl with rows(vary) and 3 column
let say first column is a,second is b, third is c;
I want the data of a, b, and c of the row.
so i tried the following ways
<br />
for(int i=0;i<numberOfRow;i++)
{<br />
CString dataA = myListCtrl.GetItemText(i,0);<br />
CString dataB = myListCtrl.GetItemText(i,1);<br />
CString dataC = myListCtrl.GetItemText(i,2);<br />
<br />
LV_ITEM lvitem;<br />
ZeroMemory(&lvitem, sizeof(lvitem));<br />
lvitem.mask = LVIF_TEXT | LVIF_STATE;<br />
lvitem.iItem = nIndex[i]; <br />
lvitem.iSubItem = 1; <br />
myListCtrl.GetItem(&lvitem); <br />
<br />
dataA = lvitem.pszText;<br />
}<br />
both ways gave me let say dataA value as junk. How can I get back my item text???
Thanks
|
|
|
|
|
Can't say why the first way is failing, but the second doesn't work because you're not providing a buffer for the control to store the text in. You need to set pszText and cchTextMax to the address and size of the buffer before calling GetItem().
--Mike--
Just released - 1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|