|
BOOL is a type defined by the Windows headers. Since MFC and Win32 were around before bool existed in C++, they use BOOL . (Actually Win32 uses BOOL to maintain C compatibility.)
--Mike--
Personal stuff:: Ericahist | Homepage
Shareware stuff:: 1ClickPicGrabber | RightClick-Encrypt
CP stuff:: CP SearchBar v2.0.2 | C++ Forum FAQ
----
"Kosh reminded me of some of the prima-donna programmers I've worked with. Knew everything but when you asked them a question; never gave you a straight answer."
-- Michael P. Butler in the Lounge
|
|
|
|
|
Michael Dunn wrote:
(Actually Win32 uses BOOL to maintain C compatibility.)
All your BOOL are all belong to C
Watch out! I'm a CPian on the edge!
I have a new Gold rating and I'm not afraid to use it! -pete
|
|
|
|
|
Yeah I was told about that before. Only thing I wonder, though, is that why they used an int not an BYTE , to represent such a type that merely needs to maintain "yes or no", but then I guess we've all used to that already.
|
|
|
|
|
It probably stems back to the days when we had 8-bit integers.
Ant.
I'm hard, yet soft. I'm coloured, yet clear. I'm fruity and sweet. I'm jelly, what am I? Muse on it further, I shall return! - David Williams (Little Britain)
|
|
|
|
|
Why use a BYTE instead of an int? It has all the same problems.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
Depending on your CPU, access to anything of less than an int may be very slow. Alpha for instance (which windows NT ran on) didn't give you easy access to a single byte, it could be done, but the code was fairly high.
|
|
|
|
|
This is going to sound like a strange question, but I'm wondering if there is any way to statically link an activex control into an app. Basically, I would like my app to use one particular version of an ActiveX control, and one version only. If a subsequent installation installs a newer version of said control and registers it into a different location, I would like for my app to continue using the one it knows about. I want to do this to reduce the dependencies between different apps that use the same control.
Is this possible? Basically, what I'm looking for is a way to bypass CWnd::CreateControl, and get a CWnd* for an activeX control that's linked into the project. Or, alternatively, call LoadLibrary with a particular path, and get the CWnd* for th control that way. I'm thinking maybe LoadLibrary, DllGetClassFactory and some other magic might make this possible. How does CWnd::CreateControl manage to do it? I would think it basicaly looks in the registry for the location of the control, calls LoadLibrary, then DlGetClassFactory, creates an instance of the object given the control's CSLID, and then . . . . what?
|
|
|
|
|
Hi there,
I have a CScrollView containing a large document. When I scroll horizontally and get to a horizontal scroll position of around 32760 pixels the scroll snaps back to the zero horizontal position. This only happens if I scroll by dragging the scrollbar itself. If I click on the little arrow at the end of the scrollbar there is no problem and it can scroll horizontally beyond 32760 pixels.
Does anybody know what could be causing this behaviour? My scrollview class does not override any of the basic scrolling functions so I feel confident it's not a bug that I've programmed in myself.
Thanks for your help!
mick
|
|
|
|
|
Hello again,
I just tested this by building a new mdi application in visual studio.net, using cscrollview as the base view class. The only change I made after the initial files were created by the ide was to set the horizontal scroll width to 35000 pixels in the view's "oninitialupdate" function. True enough, when you scroll towards the end of the view past around 32000 pixels, it hops straight back to zero!
I'd be really grateful if anybody could suggest a way of overcoming this limitation.
Regards,
Mick
|
|
|
|
|
It's a legacy from the 16bit days (only applies to Win9x, not 2000/XP). Check this article[^]. Seems like you will have to create your own scroll view deriving directly from CView .
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Thanks for the answer Joaquín
Mick
|
|
|
|
|
Just in case anybody finds this post doing a google search or something, I found a solution to the problem at codeguru (http://www.codeguru.com/Cpp/W-D/doc_view/scrolling/comments.php/c3299/?thread=41682)
You just have to override onscroll as shown below:
BOOL <br />
CMyiew::OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll)<br />
{<br />
if (GetTotalSize().cx >= SHRT_MAX || GetTotalSize().cy >= SHRT_MAX )<br />
{ <br />
SCROLLINFO info;<br />
info.cbSize = sizeof(SCROLLINFO);<br />
info.fMask = SIF_TRACKPOS;<br />
<br />
if (LOBYTE(nScrollCode) == SB_THUMBTRACK)<br />
{<br />
GetScrollInfo(SB_HORZ, &info);<br />
nPos = info.nTrackPos;<br />
}<br />
else if (HIBYTE(nScrollCode) == SB_THUMBTRACK)<br />
{<br />
GetScrollInfo(SB_VERT, &info);<br />
nPos = info.nTrackPos;<br />
}<br />
}<br />
<br />
BOOL ret = CScrollView::OnScroll(nScrollCode, nPos, bDoScroll);<br />
<br />
<br />
return ret;<br />
}
|
|
|
|
|
Basically I want to loop through a link list that I have. It wouldnt be hard if in the link list their might be classes with different data types. So I am trying to use the void pointer. Because I dont know the data type of the class and I want to try and make a function that returns the address of the last class in the link list. I am able to use templates but everything works well until I try to get the void pointer in a class to equal the void pointer of the next class in the link list. I dont see why it doesnt work because I keep getting the error error C2227: left of '->NextObject' must point to class/struct/union. I am pointing to a class void pointer and Node is suppose to be a class so I dont understand why I am getting the error. I tried casting to fix this problem either I dont know how to do it well or it doesnt work to fix this.If anyone can help I would be extremly greatful.
#include <stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <windows.h>
class Room
{
public:
void *NextObject;
Room();
};
Room::Room()
{
NextObject = 0;
name = "blue";
}
using namespace std;
Room *RoomHead;
template <class X> X *FindEndObject(X * Node)
{
void *Temp = Node;
while (Temp!=0)
{
Temp = Temp->NextObject;
cout << "MOo" << endl;
}
return Node;
}
void main()
{
void *NewRoom = FindEndObject(RoomHead);
system("PAUSE");
}
|
|
|
|
|
A void* doesn't have a NextObject method. You would need to cast this to the appropriate object with something like
Room* tmpRoom = reinterpret_cast<Room*>(Node)
tmpRoom will be null if the cast fails.
|
|
|
|
|
Room* tmpRoom = reinterpret_cast(Node)
Ummm... static_cast would suffice (and in general is preferrable to reinterpret_cast .)
tmpRoom will be null if the cast fails.
Oh, this behavior is only provided by dynamic_cast , and this type of cast can only be applied to convert from a virtual class to a virtual class, which is not the case. So, IMHO static_cast should be used, and the cast does not fail ever (of course, if Node didn't point to an actual Room object, then the program could crash or whatever.)
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
I tried doing so and with a few changes I finally got the program to compile with this modify function
template <class x=""> void *FindEndObject(X *Node)
{
X* Temp1;
if(Node->Next==NULL)
{
return Node->Next;
}
void *Temp = Node->Next;
cout << "Hey Friend" << endl;
while (Temp!=NULL)
{
cout << "Hey Friend" << endl;
Temp1 = reinterpret_cast<x*>(Temp);
Temp = Temp1->Next;
}
return Temp;
}
But not the problem is that their is a runtime error at if(Node->Next==NULL) I dont understand why their would be a error if I am trying to see if Next == Null;
|
|
|
|
|
But not the problem is that their is a runtime error at if(Node->Next==NULL) I dont understand why their would be a error if I am trying to see if Next == Null;
Maybe Node itself is null? Or maybe you're pasing an invalid pointer.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Sorry I didnt see the post before I posted my last message and I tried to fix my program using the advice. I am still receiving the same runtime problem which stops at while (tmpRoom->Next!=0) Node shouldn't be NULL because Node would be a pointer to Room *RoomHead. Which is a global object. RoomHead->Next should = 0 because in the room constructure Next = 0; So FindEndObject should just return the value of tmpRoom because their is only one object in the link list. I tried every way to use the static_cast and I still cant get it to work. I am not even sure if I am doing it 100% correct. I dont want anyone to give me the code for the function because I will like to learn exactly how to do it my self. But if anyone could give me a little more detail hints I would appreciate it alot because right now I am not 100% sure how to implement the advice I am getting to my code. I guess because of the fact I never used void pointer or used any form of cast.
This is how my program looks so far
#include <stdlib.h>
#include <iostream>
class Room
{
public:
void *Next;
Room();
};
Room::Room()
{
Next = 0;
}
using namespace std;
Room *RoomHead;
template <class X> X *FindEndObject(X * Node)
{
X* tmpRoom = Node;
while (tmpRoom->Next!=0)
{
cout << "We Got Here" << endl;
tmpRoom = static_cast<X*>(tmpRoom->Next);
}
return Node;
}
void main()
{
void *NewRoom = FindEndObject(RoomHead);
system("PAUSE");
}
|
|
|
|
|
RoomHead is a pointer not an object. As such it has never called the constructor.
Declare it as
Room RoomHead
instead.
Dave
|
|
|
|
|
Lol thank you alot. I can't believe I didn't notice that. Thanks to everyone who helped me with my program.
|
|
|
|
|
You should question any design that entails objects being cast from void*. In general it's just plain bad.
But, that's just my opinion... I could be wrong.
|
|
|
|
|
Hi, i've got the following line in my app:
printf("Press Enter to continue\n");
...
clrscr();
i want to display the message until the user presses enter and then clear the screen.
what command should i use for that?
I need only ANSI C commands
i remember that in pascal you can use
readln;
thanks!
|
|
|
|
|
How about:
do
{
printf(...);
} while (getch() != 0xa);
clrscr();
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
#include <conio.h>
getch();
getch will wait until any key is pressed - test the return for
'\n' if you want the enter key.
do
{
ret = getch()
}
while (ret != '\n');
Dave
|
|
|
|
|
I cannot get specific dates to go bold in the DateTimeCtrl. I want to specify which days are bolded in the popup calendar. I do the following:
OnDropdownDateTimePicker(...)
{
CMonthCalCtrl * cal = m_ctrlDTP.GetMonthCalCtrl();
MONTHDAYSTATE *md;
short len;
SYSTEMTIME tFrom, tTo;
if (cal)
{
cal->ModifyStyle(0, MCS_DAYSTATE); // change style to allow daystates
len = cal->GetMonthRange(&tFrom, &tTo, GMR_DAYSTATE);
md = new MONTHDAYSTATE [len];
memset(md, 0, sizeof(MONTHDAYSTATE) * len);
BOLDDAY(ms[0], 1); // MS macro to set day 1 of first month bold
cal->SetDayState(len, ms);
}
}
and nothing happens.
Anybody know what I am missing?
Thanks
Dave
|
|
|
|