|
Well, I would hack the driver.
Oh, wait, I wouldn't, but you might do it.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi,
I have dialog and i set the background to LIGHTGRAY color in OnPaint()
pDCTmp->FillRect(rect,&CBrush(LIGHTGRAY));
So all static controls has normal dialog background colr.SO i use follwing code in OnCtlColor()
if (nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(0, 0, 0));
pDC->SetBkMode(TRANSPARENT);
}
But nothng happened,
Browsing some articles i try to include this
CBrush m_brHollow = m_brHollow.CreateStockObject(HOLLOW_BRUSH);
if (nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(0, 0, 0));
pDC->SetBkMode(TRANSPARENT);
hbr = m_brHollow;
}
This also no use.Finally i try
pDC->SetBkColor(LIGHTGRAY);
CBrush brush;
if((HBRUSH)brush == NULL)
brush.CreateSolidBrush(LIGHTGRAY);
return (HBRUSH) brush;
But no use.Still it shows the samething.What can i do?
Anu
|
|
|
|
|
Your problem seems to be elementary.When the CWnd::OnCtlColor is finished the brush you have created inside is automatically destroyed by the MFC runtime without warning, so nothing happened.You should declare the brush as your window class member variable not as local variable.At first simply put it in your dialog(for example) h file:
class CMyDialog:public CDialog
{
protected:
CBrush m_brH;
....
}
Initialize in the dialog contructor
CMyDialog::CMyDialog(CWnd* pParent )
: CDialog(CMyDialog::IDD, pParent)
{
...
m_brH.CreateSolidBrush(RGB(0,0,255));
return TRUE;
}
Use it elsewhere without releasing:
HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor == CTLCOLOR_STATIC)
{
hbr = m_brH;
}
return hbr;
}
and at last don 't forget to release it:
CMyDialog::~CMyDialog()
{
if(m_brH.m_hObject!=NULL)
m_brH.DeleteObject();
}
Life is a stage and we are all actors!
modified on Thursday, May 20, 2010 10:30 AM
|
|
|
|
|
|
Hi,
I want to open control panel in MFC dialog box application.When i click a button, want to open control panel
|
|
|
|
|
Try that:
<br />
::ShellExecute(m_hWnd, NULL, _T("control.exe"),NULL, NULL, SW_SHOW);<br />
Life is a stage and we are all actors!
|
|
|
|
|
|
Dear Sir/Madam,
I want to retrive the system's seral number via using DOS Command in Turbo C.
|
|
|
|
|
What is the "system's serial number"?
Why do you want to use [euphemism] a bit outdated [/euphemism] technology?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
System means our Computer system
|
|
|
|
|
I like to retrive the motherboad Number via DOS command by using in 'C' Language.
|
|
|
|
|
I am not aware of any DOS command that can get this information, you probably need to investigat the WMI classes. Take a look at Win32_BaseBoard[^].
It's time for a new signature.
|
|
|
|
|
How to increase the size of a button according to button text.
Thanks..
|
|
|
|
|
You can use the GetTextExtentPoint32[^] to measure the text. Remember to use the same font the button is.
Steve
|
|
|
|
|
Thnx stev, but the above function is giving height and width of string, how to create button on the basis of the string size.
Thanx..
|
|
|
|
|
You can use GetWindowRect to find out where the button currently is and MoveWindow to resize it.
It might be an idea to create a new control based on BUTTON (or derive a new class if you're using MFC) which resizes itself rather than trying to pack all this lot into the containing dialogue box or window.
Cheers,
Ash
|
|
|
|
|
Every release for visual studio must be contain a version of MSDN. As follow described:
A: The October 2001 MSDN Library integrate with Visual Studio 6.0.
B:The January 2003 MSDN Library integrate with Visual Studio .NET (2002).
C:The January 2006 MSDN Library integrate with Visual Studio .NET 2003.
D: The April 2007 MSDN Library integrate with Visual Studio 2005 (Service Pack 1).
E: The January 2008 version integrate with Visual Studio 2008.
F: The November 2008 version integrate with Visual Studio 2008 SP1.
I only have one question, should i use the newest MSDN for query the usage for function, enum, etc. Or should i use the associated version with VS(if use VS6.0 for development, then use MSDN 2001 oct, if use VS2005, then use MSDN 2007 april)?
One day a pretty girl asked me:"Do u think you are handsome?" "I don't think so!".She gave a slap in my face:"Why lying?"...
|
|
|
|
|
Use the one matching the version of the SDK you have installed.
|
|
|
|
|
This c++ application has two static functions that are used everywhere (about 130+ calls for each function):
incCount()
and
decCount()
At the start of the program the Count = 0, the problem is that once the processing is complete the Count must == 0. The Count can go as high as it needs to, but by the time the application ends each incCount() call must be balanced with a decCount() call.
Currently, the Count == 1 by the time the program ends and I must find out where a decCount() isn't called.
What is the best way to find out which code module isn't balancing the Count properly ?
(this is a C++ 6 application)
|
|
|
|
|
You cannot do this with one variable.
This is usually done by creating many instances of a class.
The class will internally have functions to increment and decrement.
When the class is created you can generate some sort of cookie that is unique across instances.
This was we can log which instance in incrementing and decrementing.
|
|
|
|
|
my current idea is to define the following with #ifdef _DEBUG playing a huge role:
in the class:
#ifdef _DEBUG
static Uint32 incCount (char cModule);
static void decCount (char cModule);
#else
static Uint32 incCount ();
static void decCount ();
#endif
the class where these functions are defined also implements a linked list. For each incCount(char) the char is added to the linked list (if it doesn't yet exist in the list), and for each decCount(char) the char is removed from the linked list.
then for each time the functions are called in the code:
#ifdef _DEBUG
decCount(__FILE__);
#else
decCount();
#endif
At the end of the program I dump what's in the linked list and the __FILE__ that is dumped is where I need to focus on by setting breakpoints.
However, this will touch at least 40 files. Is this the best method or is there a better method ?
For example, it would be incredible if I had programmatic access to the call stack (in a debug build) so that I would only need to edit this one class and add the source file to the linked list that's next in the stack.
|
|
|
|
|
First of all, if you are using multiple threads (explicit ones, or implicit ones such as used by asynchronous events, callback routines, etc), and your counter increment/decrement isn't atomic, it may well be that the number of calls is correct and the value is incorrect.
Assuming you have verified that, you will need to differentiate your function calls; an easy way would be to give them one positive integer parameter, using the same value for matching pairs of incCount(id) and decCount(id).
Then you want to count the operations for different id values in separate accumulators. There are many ways to do so:
- use an array, ranging from 0 to maximum(id);
- if that is not doable, use a smaller array with P elements, and use id%P
(the modulo operator will map any value of id to a valid index for your array).
Special case: if only one decCount() call is missing, you might even try this:
int count=0;
int P=32;
void incCount(int id) {
count^=1<<(id%P);
}
void decCount(int id) {
count^=1<<(id%P);
}
which means each call is toggling one bit in a single counter (assuming P is 32 or less); in the end the bit number of the one non-zero bit gives you the id%P. And you could use additional runs with different P values to find the actual value of id!
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]
I only read formatted code with indentation, so please use PRE tags for code snippets.
I'm not participating in frackin' Q&A, so if you want my opinion, ask away in a real forum (or on my profile page).
|
|
|
|
|
I see, your method uses each bit in P to track a different code module.
That's less work than implementing a linked list and I don't have to edit a load of compiler conditionals.
EDIT:
I counted 43 code modules that need to be ID'd
modified on Wednesday, May 19, 2010 5:29 PM
|
|
|
|
|
if you have a limited number of id values, you can count their calls individually.
if they are many, you fold them to a smaller value.
And you already expect only one mishap, you could take advantage of that.
But first of all, you should inspect the potential multi-threading issue; your observation could simply be wrong!
I would avoid introducing fancy things (such as your linked list idea), as things in there can also go wrong; especially with a list, you would find it either difficult or expensive to get it thread-safe. Whatever code you add, it would better be thread-safe!
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]
I only read formatted code with indentation, so please use PRE tags for code snippets.
I'm not participating in frackin' Q&A, so if you want my opinion, ask away in a real forum (or on my profile page).
|
|
|
|
|
I went with your idea of passing in an ID.
The integer ID is used by the counting functions to track which module the call came from (keeps track with an array).
with this method I can track what modules inc's and dec's don't match up.
|
|
|
|