|
NULL is usually something similar to this:
#define NULL (void *)0
it's just a zero. and by convention, zero is a non-valid address.
you could do this: DWORD dw = NULL; but people generally only use NULL with pointers.
-c
Smaller Animals Software, Inc.
You're the icing - on the cake - on the table - at my wake. Modest Mouse
|
|
|
|
|
NULL means "invalid address for a pointer". Anything beyond that (like it being equal to zero) is implementation-specific and should not be relied on.
--Mike--
"There are only a limited number of jobs where they will ask to see the sausage. Most of them are in movies."
-- Christian Graus, 2/11/2002
My really out-of-date homepage
Sonork - 100.10414 AcidHelm
Big fan of Alyson Hannigan.
|
|
|
|
|
I having some interesting problems with the following code.
When the fill color is set to "White" the color displayed
is the background color of the menu. Other colors appear
to work fine. Even the outline of the rectangle appears OK.
Here is the code:
CClientDC dcScreen(this);
WORD bitmap_width = GetSystemMetrics(SM_CXMENUCHECK);
WORD bitmap_height = GetSystemMetrics(SM_CYMENUCHECK);
CRect rect(0, 0, bitmap_width, bitmap_height);
m_background_bitmap.CreateCompatibleBitmap(&dcScreen, bitmap_width, bitmap_height);
CDC dcMem;
dcMem.CreateCompatibleDC(&dcScreen);
CBrush brush(RGB(255, 255, 255));
CBrush black(RGB(0, 0, 0));
CBitmap* pOldBitmap = dcMem.SelectObject(&m_background_bitmap);
dcMem.FillRect(rect, &brush);
dcMem.FrameRect(rect, &black);
dcMem.SelectObject(pOldBitmap);
VERIFY(mmenu->SetMenuItemBitmaps(ID_SETTINGS_COLOR_BACKGROUND, MF_BYCOMMAND, &m_background_bitmap, NULL));
Any suggestions?
Thanks
Eldon Zacek
VP of Engineering
Czech-Mate Enterprises, LLC
|
|
|
|
|
Maybe this can explain what happens:
The selected and clear bitmaps should be monochrome. The system uses the Boolean AND operator to combine bitmaps with the menu so that the white part becomes transparent and the black part becomes the menu-item color. If you use color bitmaps, the results may be undesirable.
(from MDSN topic "SetMenuItemBitmaps" - Platform SDK: Windows User Interface).
|
|
|
|
|
In VS 6.0 I had some code in which I was creating Polygons from vector<LONG> iterators.
Something like this:
vector<LONG> mypoints;
...
Polygon(hdc,(LPPOINT)mypoints.begin(),point_count);
This compiled and ran fine in 6.0, and seemed like a relatively reasonable way to dynamically maintain a list of points for drawing so that I did not need to allocate and deallocate POINT arrays.
7.0, however, will not compile it. I get a ansi c++ conformance error (C2440).
I'm no compiler guru, but this behavior just does not seem intuitive to me. I can easily work around it, but I don't like it.
Any thoughts?
"Thank you, thank you very much" Elvis.
|
|
|
|
|
mypoints.begin() returns an iterator. The can be LONG* but it does not have to be. The problem could be that it was LONG* in VC6 but was changed to another type in VC7.
To fix the problem, try this
CHANGE (LPPOINT)mypoints.begin() TO
(LPPOINT)&mypoints[0]
Hope this helps,
John R. Bandela
|
|
|
|
|
Hello Stan,
The compiler does the right thing , i think,you're trying to cast from a struct tagPOINT* (LPPOINT) to a iterator of type LONG*
try casting first to void* then to LPPOINT or try with reinterpret_cast ...
and do the following experiment replace the line with the polygon function with this one
Polygon(hdc,static_cast<LPPOINT>(mypoints.begin()),2);
See if it gives the same error, the compiler are rejecting correctly
your cast, only if you casted to a universal pointer (void*), the cast would worked. If i'm speaking true on this, i have my doubts, ... then welcome to a world with much more ANSI compliance ... if not forget about all this bullshit and i'am mistaken
Hope this helps ,
Joao Vaz
|
|
|
|
|
Polygon(hdc,static_cast<LPPOINT>(mypoints.begin()),2);
If i can't post this cast correctly , i quit
Cheers;
Joao Vaz
|
|
|
|
|
You need to dereference the iterator to get at the LONG, then take that address of the LONG:
&*mypoints.begin()
--Mike--
"There are only a limited number of jobs where they will ask to see the sausage. Most of them are in movies."
-- Christian Graus, 2/11/2002
My really out-of-date homepage
Sonork - 100.10414 AcidHelm
Big fan of Alyson Hannigan.
|
|
|
|
|
I want to get the params between the brackets ("wr wwre" , "jliuo"),
but following doesn't work: (below without brackets)
if(sscanf(szScript, "\"%[^\"]s%*[,]1s\"%[^\"]s", szParam1, szParam2) != 2)
return false;
Can somebody help me?
|
|
|
|
|
Use strtok, which is much easier to use and more flexible.
--Mike--
"There are only a limited number of jobs where they will ask to see the sausage. Most of them are in movies."
-- Christian Graus, 2/11/2002
My really out-of-date homepage
Sonork - 100.10414 AcidHelm
Big fan of Alyson Hannigan.
|
|
|
|
|
Hey guys
You know u use meset to set a memory location to a specific value is it better to initalise the memory area to 0 or to NULL.
Peter
|
|
|
|
|
From the point of view of semantic correcteness, you should use 0. In practice, it won't make any difference (appart from some warning from the compiler). I'd say it is best to use 0.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
In debug builds, it is extremely useful to set the memory to some clearly identifiable pattern. Depending on the target architecture, it is best to pick some value which will help catch accidental execution of uninitialized memory. Microsoft's x86 debug environment tends to set memory blocks to 0xcdcdcdcd because it resolves to a series of int 0x3h instructions (debug break on x86)
In a release build however, best practice is to set the value to 0 as Joaquín stated above.
Victoria
|
|
|
|
|
With cero..
Regards....
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|
|
How can I catch a doubleclick from a CEdit control?
|
|
|
|
|
Subclass from Cedit (to say CMyEdit ) and add a handler for WM_LBUTTONDBLCLK in CMyEdit .
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
create new class,derive it from CEdit and ovverriden WM_LBUTTONDBLCLK
Mazy
Don't Marry a Person You Can Live With...
Marry Someone You Can Not Live Without
|
|
|
|
|
I use VC 4 and want to upgrade.
But: shall I upgrade to VC 6.0 or to .NET ?
What are the differences ?
Can I import projects developed with VC 4 ?
What kind of code will .NET generate ?
Is it as smart as the VC 4 - code ?
Ralf
|
|
|
|
|
I think you meen VC++7;)
You can install visual studio.Net,then you have both VC++7 and .Net platform
They are not the same things,in VC++7 you'll use MFC7 and new version of ATL
and also managed C++(.Net)
MFC7 and .net are seprate things
Mazy
Don't Marry a Person You Can Live With...
Marry Someone You Can Not Live Without
|
|
|
|
|
Oh, I thought VC++ .net follows VC++ 6.0 because I have never heart of VC++ 7.0.
What is the difference between VC++7 and managed C++ (.NET) ?
Is there any compatibility ?
Can I import project from VC++4 to managed C++ (.NET) ?
|
|
|
|
|
In VC7 you can use both manageg and unmanaged C++,and also you can import your project from VC4 to VC7 ,VC7 has really perfect compiler,you can use CString in both ATL and MFC,also there are some more advantagous in VC7 too.
You see,VC7 is perfect;)
|
|
|
|
|
"First-chance exception in ess2.exe (KERNEL32.DLL): 0xC0000005: Access Violation."
I see this message in the debug box of VC6 each time I fly, with the mouse, the buttons of the standard toolbar of a single document/view architecture.
My app only contains the files generated by the wizzard.
What does it mean and where does this message come from???
elisabeth.sever@europlacer.fr
|
|
|
|
|
You might want to consult this thread about first-time exceptions that took place some weeks ago.
In your particular case, I'd say these exceptions are caused by lacking of appropriate command handlers, but this is just a guess.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Joaquín's thread makes some good points, but _sometimes_ it can be informative to at least try to see whats causing the exception (especially if you find yourself in a situation where all these fce's are clouding up your output window).
With your app running in debug select Exceptions from the debug menu. Highlight Access Violation, select 'Stop Always' and Change.
Now, go to your app and move the mouse over a toolbar icon. You should now get drop into the debugger when the exception is detected by the debugger.
If you find yourself looking at assembly, you may still be able to glean some info from the call stack window (Alt+7) though sometimes not. This can be especially annoying on a system with no System DLL Symbol files installed, or 98 which doesn't ship them. (I bet you're running on 98, if a standard App wiz app is doing this - 98 has some grotty comctl32 aspects).
Anyway, application code that traps exceptions might do so far away from the code that actually caused the fault, and this First Chance vectoring by the debugger might sometimes be the only way to pinpoint the actual location of the problem. It also alerts you to the fact that some DLL or whatever caused and trapped an exception - which, as Joaquín points out, may be no big concern.
Try placing a call to IsBadReadPtr(0, 100) in your views OnDraw method to see what I mean. This fn pushes an exception handler onto the stack then trys to read the memory - if an access violation occurs (as it will with an addr of 0), the int 5 trap handler in the debugger gets it first (hence 'first chance') before its handled in kernel32, so you should see lots of these lines output. The option you checked above allows you to drop right into the code of IsBadReadPtr (at least on NT) when this trap occurs.
|
|
|
|