|
Why dont you enable/disable or show/hide the controls at runtime, it is also better by UI Design-Guidelines.
-> Make a full dialog with all resources in the resource editor, assign control objects to all controls and work with mycontrol.EnableWindow( bActiveNow )
Try this @ home. (B&B)
|
|
|
|
|
I've thought of that as well.
But I really don't have a clue as of what the maximum number of controls is. I could of
course create a ridiculously large amount of CButton objects to be on the safe side, and just
hide/show those. But it sounds a bit unneccessary to me...
And I'm still very much interested in attaching a message handler dynamically. Can I for example
create a hook and install it for every new item? And in that hook listen for the BN_CLICKED event
and if one is received obtain the text for the control and pass it further on?
If so, how is a hook procedure attached?
|
|
|
|
|
Hello, I don't know if this is super-easy to accomplish,
I am pretty new to VC++/MFC..
I need to create a dialog which must contain a different number
of CButton controls depending on certain state parameters of the
applications. So I need to dynamically create a number of those
controls and attach a message handler for them ( they all share
the same message handler code ).
How do I attach this listener function to the controls once
I've created them?
(I destroy all buttons and create a bunch of new ones when the layout changes)
thankful for any help.
|
|
|
|
|
Hello,
Can a GDI object be created once (say when the class is constructed) and be used as many times as the programmer is pleased?
Example:
Class::Class()
{
myPen = CPen(....);
}
void Class::DrawThis()
{
pDC = new CDC();
pDC -> Attach(GetDC() -> GetSafeHdc());
pDC -> SelectObject(&myPen);
}
Is this valid and recommended?
dNimrod#X
________________________
|
|
|
|
|
Yes, but I don't recommend it because it can be hard(er) to maintain code that shares GDI objects. The only time I'd keep a GDI object around for the lifetime of my app is when it's very expensive to create one on the fly.
One other thing - DrawThis() should unselect myPen when it's done using it. For example:
void Class::DrawThis()
{
CPen* pOldPen = pDC->SelectObject (&myPen);
...
pDC->SelectObject (pOldPen);
} /ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
I disagree with Ravi, if you are going to use a GDI object a lot, I say create it once and just keep using it. The exception is device contexts (CDC and related classes) - DCs are a shared and scarce system resource, and CDC s should exist for only as long as you need them.
Your sample code is wrong, however, in the way it's using CDC . You need to match GetDC() and ReleaseDC() calls, as well as select the pen out of the DC before releasing it.
--Mike--
Personal stuff:: Ericahist | Homepage
Shareware stuff:: 1ClickPicGrabber | RightClick-Encrypt
CP stuff:: CP SearchBar v2.0.2 | C++ Forum FAQ
----
#include "witty-quote.h"
|
|
|
|
|
|
I have been trying to create a tokeninzer/scanner for my school project. But I have a hard time dealing with spaces between words. rather than it would separates the words after spaces, it will keep on adding the characters to one big word. If I inputed "print codes", it will make the variables as one 'printcodes' rather than "print" as one keyword and "codes" as identifier.
Could anyone help me solve this problem?
Here is the c++ codes I created:
while(!read.eof()) //(read>>letter)
{
//catching symbols
if(letter == '*'||'/'||'+'||'-'||'='||'('||')') {
checkid.checktokenop(letter); }
char gotit2 = letter;
//catching letters
if(gotit2 != '*')
if(gotit2 != '/')
if(gotit2 != '+')
if(gotit2 != '-')
if(gotit2 != '=')
if(gotit2 != '(')
if(gotit2 != ')')
{
int result = 1;
codes+= gotit2;
if(gotit2 == ' ')
{
result = checkid.checktokenword(codes);
codes.erase();
}
if(result == 0)//if Reserved word and,or,print,not
{
codes.erase();
}
}//end of catching letter
}
Please help!!!
|
|
|
|
|
|
Hello,
How does one do about disabling/enabling a menu and toolbar item that share the same ID?
Thanks a million,
David
|
|
|
|
|
Hi,
You can to obtain it adds an event to UPDATE_COMMAND_UI message, associated to this ID, with ClassWizard.
<br />
void CMainFrame::OnYourEvent(CCmdUI* pCmdUI) <br />
{<br />
pCmdUI->Enable(m_bFlag);<br />
}<br />
the m_bFlag is a bool variable to manage the enabing/disabling.
Ivan Cachicatari
www.latindevelopers.com
|
|
|
|
|
Hi, thanks for the reply!
Can you tell me how to enable/disable an item without having to wait for the event to fire?
I mean, what is the way to do it manually?
|
|
|
|
|
dNimrod#X wrote:
without having to wait for the event to fire?
The event is sent during the app's idle processing. You don't have to do anything special - just set the appropriate bool variable to false and query it in the UI update handler. Try it - you'll like it!
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Hi there,
I have this application which opens different modeless dialog boxes and has some accelerators defined.
My question is assuming a window/control/... has the focus at the time, how can the C[...]App know the user pressed a key? Basically, what I am trying to do is make the app process certain accelerators, independently of the window that has the focus.
|
|
|
|
|
The easiest way is to use a "hot key". See RegisterHotKey .
"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!
|
|
|
|
|
My purpose is to pass an icon to the resource of a file or dll. If you have any sugestions..
for that I have to use UpdateResource
so I did that
hUpdateRes = BeginUpdateResource("D:\\Bureau\\ressource\\test resource\\test resource.exe", FALSE); <br />
if (hUpdateRes == NULL) <br />
{ <br />
MessageBox(0,"Could not open file for writing.",0,0); <br />
} <br />
<br />
result = UpdateResource(hUpdateRes,RT_ICON,szTitre,MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),ico,1384);
if (result == FALSE) <br />
{ <br />
MessageBox(0,"Could not add resource.",0,0); <br />
} <br />
<br />
<br />
if (!EndUpdateResource(hUpdateRes, FALSE)) <br />
{ <br />
MessageBox(0,"Could not write changes to file.",0,0); <br />
}
1384 reprsente the exact size of the ico, I will chage it with sizeof or somethingelse
my problem is ico
acording to msdn ico, so the LPVOID lpData must be in "raw binary data" and the "text must be in Unicode format"
so I try that
char* ico;<br />
wchar_t *wchar=(wchar_t *)malloc( sizeof( wchar_t ) );<br />
<br />
_setmode( _fileno( stdin ), _O_BINARY ); <br />
FILE* file=fopen(szFile,"rb");<br />
FILE* filedest=fopen("dest.ico","w");<br />
fpos_t pos;<br />
if(fseek(file, 0,SEEK_END)!=0)MessageBox(0,"fseek erreur",0,0);<br />
else<br />
{<br />
if( fgetpos( file, &pos ) == 0 )<br />
{<br />
<br />
ico=(char*) malloc((size_t)pos);<br />
fseek(file, 0,SEEK_SET);<br />
fread(ico, sizeof( char ), (int)pos, file );<br />
mbtowc( wchar ,ico,MB_CUR_MAX );<br />
}<br />
}<br />
fclose(file);<br />
fclose(filedest);
I'm not sure about the mbtowc, ...
If have no clue to pass ico in "raw binary data and in Unicode format"
Pleazeeeeeeee help me!!
|
|
|
|
|
If the "lpType" parameter is a string resource, it must be in UNICODE format. That is what MSDN says.
But since your "lpType" is RT_ICON, you do not need to do anything, since a icon contains no text, just binary data.
But if you wanted to update a resource type of RT_STRING for example, *that* string(pointed to by lpData) would need to be made into UNICODE.
Bikram Singh
|
|
|
|
|
Dear All,
I am trying to reterieve all the table names of a data bases selected through ODBC Data Source. The Language is MS Visual C++ 6.0 and OS is Windows 2000.
Still i am unable to do it.
I have written a code for it which is given below and is not working
Please help me in this regard.
Anxiosuly Waiting for some Help
//Code
/*******************************
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
SQLRETURN retcode;
char * szdatabase = "a";
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
SQLDriverConnect(hdbc, NULL, (SQLCHAR*)szdatabase, (short)(strlen(szdatabase)+1),
NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
retcode = SQLTables(hstmt, (SQLCHAR*) "%", SQL_NTS, NULL, 0, NULL, 0, NULL,0);
omair
|
|
|
|
|
Does CDaoDatabase::GetTableDefCount() help?
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
Somebody know how to get the Handle window of the child window created with the Instruction CreateProcess, to relocate, resize, etc. this new window..
Thanks for your help.
|
|
|
|
|
This probably a hack, and someone else will come along and say "Don't do that, use function so-and-so". But I don't know of any function that does this directly. So what I came up with is to use EnumWindows() to enumerate all the top level windows. In the EnumWindowsProc() use GetWindowThreadProcessId() to compare the window process ID with the one you got from CreateProcess() . Just be sure to leave enough time between the CreateProcess call and the EnumWindows call for the window to be actually created.
Works like a charm.
"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!
|
|
|
|
|
hello,
I have always asked myself, how a program as flashget knows download speed? is there any library that those that job? anyone can give me some info about? thanks a lot!
Paolo
|
|
|
|
|
Is there a way to jump of out a heavily-nested loop not by using goto statement? Since most people would agree that goto statement is evil, and it will easily destory a program's structure, so, I want to stay away from it. However, to my surprise, there is really no easy and effective way to jump out of a heavily-nested loop not by using it.
Well, I thought I should consult those experts on codeproject.com, so I could learn from them -- you.
Thanks
-----------------------------
C++ without virtual functions is not OO. Programming with classes but without dynamic binding is called "object based", but not "object oriented".
|
|
|
|
|
Alex Ngai wrote:
goto statement is evil,
It is not evil to use a goto statement when it transfers control to the end of the containing block. The C language even supplies you a couple of built-in constructs to make this easy to do - continue and break , the latter being nothing more than a continue followed by a loop terminator.
If you can't get yourself to use a goto for fear that someone will throw things at you in a code review (because they "learned in school that a goto is bad, bad, very bad"), you could instead throw an exception when you want to break out of a nested block, and take appropriate action in the catch .
Whatever you do, be sure to write a nice comment explaining what you've done. The person who ends up maintaining your code (usually yourself) will thank you for this while debugging at 3am on a winter's night.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
I recently saw a horrible code structure (thankfully that I didn't have to maintain) that looked like:
while ( TRUE )
{
if ( condition1 )
{
break;
}
if ( condition2 )
{
break;
}
break;
} Note the break at the bottom of the while block.
That's right: the while block isn't actually a loop at all - it's simply a device to get break to skip to the bottom of the block.
I'M NOT RECOMMENDING THIS. I think it's a horrible practice. It took me a good two hours to actually realise that it was, in fact, a goto.
When Dijkstra originally wrote his 'goto considered harmful' paper, he was pointing out the benefits of block control structures for those programmers using languages without them, or die-hard programmers not using those structures in the new languages. Uncontrolled, poorly-designed use of gotos is simply confusing - it's hard for a maintainer to know what's going on - but so is the misuse of any control structure. I don't recommend misusing exceptions in the way you suggest, either.
For more, see Gotos Considered Harmful and Other Programmers' Taboos[^].
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|