|
I don't think there is an easy way to stop the header bar from showing the split without it being owner-drawn.
1- You could always reduce the width of the columns, so it looks like a sub-column.
2- You could also insert the text using some spaces between the two sub-column entries in the same column.
this is this.
|
|
|
|
|
Hi all,
I have custom scrollbar. I need to track the thumb as windows tracks the thumb of a scrollbar. My logic is not working very well. the thumb is not reaching the bottom Do u know how to calculate physical position of the thumb accordign to the logical position(scroll range).
SaRath.
"Don't Do Different things... Do Things Differently..."
|
|
|
|
|
hi
in spread how to get the position of cursor like the cursor is in 4 chars from start or 5 chars from start .
"Men never do evil so completely and cheerfully as when they do it from religious conviction"
-Pascal
|
|
|
|
|
Hi
I want to display finish button on Property page along with next and back button. For this i have changed code according to MS link
http://support.microsoft.com/kb/q143210/[^]
but finish button is not displayed.How does MFC internally handles calls to
ID_WIZFINISH and ID_WIZNEXT buttons?
Thanks in advance
Abhi Lahare.
|
|
|
|
|
to display the finish button overide the OnSetActive function of that page and put the following code in it
CPropertySheet* psheet = (CPropertySheet*) GetParent();
psheet->SetWizardButtons( PSWIZB_FINISH );
nave
|
|
|
|
|
hi Naveen,
psheet->SetWizardButtons( PSWIZB_FINISH ) will set the FINSIH button on property sheet and will hide NEXT button,
I want all the buttons Back,Next,Finish,Cancel all the time on all pages of wizard. expect the last page where there will be no Next button.
Also i want to override functionality of Finish Button.
Thanks in advance
Abhi Lahare
|
|
|
|
|
did u try the following steps
1. Overide the OnSetActive() function in the class of last page
2. Put the following code in it
CPropertySheet* psheet = (CPropertySheet*) GetParent();<br />
psheet->SetWizardButtons( PSWIZB_FINISH );
To overide the functionality of finish button overide the function OnWizardFinish()
nave
|
|
|
|
|
...OnSetActive()
{
// TODO: Add your specialized code here and/or call the base class
CPropertySheet *pParent;
pParent = static_cast<cpropertysheet *=""> (GetParent());
pParent->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT|PSWIZB_FINISH);
return CPropertyPage::OnSetActive();
}
Regards
Amar
|
|
|
|
|
I need to replace Sleep(n) in my code by a timer (in a while loop or something).
Sleep is turning out to be very inaccurate with errors of upto 40 milliseconds.
can anyone please give me some easy to understand code to do this replacement.
|
|
|
|
|
If you are using MFC, then it is a bit easier.
Set the timer using SetTimer() .
Handle the WM_TIMER message, OnTimer() etc.
But this one is also not accurate. It skids slowly in one direction or the other until you have an error that is seconds long in a few hours.
The better timer available is the Multimedia timer .
Just look up WM_TIMER message and SetTimer() function, and you are on your way. Do all the processing in the OnTimer() function and without using any loop or Sleep() .
this is this.
|
|
|
|
|
You won't be able to have a precision under 10 or 15 msec (depends of the CPU load and other factors) because windows is not a real-time operating system. If you need to have such precision, you'll need to look for another OS.
Cédric Moonen
Software developer
Charting control
|
|
|
|
|
I think you can try to replace Sleep with QueryPerformanceCounter .
The code can look like this. First, get the frequency of high-resolution performance counter; this can be done once in your program:
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
Then, when you need a delay, use the following approach:
int const delay_ms = 500;
long long n = delay_ms * freq.QuadPart / 1000;
LARGE_INTEGER c;
QueryPerformanceCounter(&c);
long long const f = c.QuadPart + n;
do
{
QueryPerformanceCounter(&c);
} while( c.QuadPart < f);
Hope this solution will meet your requirements.
|
|
|
|
|
Sharath86 wrote: can anyone please give me some easy to understand code to do this replacement.
try QueryPerformanceCounter
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
I tried that and the error is worse than when i use Sleep.any other mechanisms like Timers or something. this is a DLL btw not in an MFC application...
|
|
|
|
|
Sharath86 wrote: btw not in an MFC application...
BTW the Way QueryPerformanceCounter and QueryPerformanceFrequency are Api not MFC Function!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
Which is a better way to return values and why?
1)
int Test(int n)<br />
{<br />
int nReturn = 0 ;<br />
<br />
if( n == 0 )<br />
{<br />
nReturn = 0 ;<br />
}<br />
else if( n == 1 )<br />
{<br />
nReturn = 1 ;<br />
}<br />
else<br />
{<br />
nReturn = -1 ;<br />
}<br />
<br />
return nReturn ;<br />
}
2)
int Test(int n)<br />
{<br />
if( n == 0 )<br />
{<br />
return 0 ;<br />
}<br />
else if( n == 1 )<br />
{<br />
return 1 ; <br />
}<br />
<br />
return -1<br />
}
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
I prefer 2nd option
never say die
-- modified at 1:47 Tuesday 6th June, 2006
|
|
|
|
|
TechyMaila wrote: Which is a better way to return values and why?
I suggest another way
int Test(int n)
{
if(n==0 || n==1)
return n;
return -1;
}
Knock out 't' from can't,
You can if you think you can
|
|
|
|
|
Isn't it said that a good programming practice is to always return values at the end or rather just have one single return point?
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
One more way:
inline int Test(int n)
{
return (n == 0 || n == 1) ? n : -1;
}
|
|
|
|
|
Viorel. wrote: return (n == 0 || n == 1) ? n : -1;
?: operator is slow.
Maxwell Chen
|
|
|
|
|
Maxwell Chen wrote: ?: operator is slow.
I do not think the ternary operator ?: is slower then an if statement, because in both cases the program is translated to the same series of microprocessor instructions, like CMP , JE , JMP . In my opinion, the ?: operator is a compact way for particular if , and makes the text shorter and probably clearer, but does not affect performance or code size.
|
|
|
|
|
My method is this way:
Build in Release mode, turn off the optimization.
int TestI(int n)
{
if(n==0 || n==1)
return n;
return -1;
}
int TestO(int n)
{
return (n == 0 || n == 1) ? n : -1;
}
void CTestDlg::OnBnClickedButton1()
{
DWORD s = GetTickCount();
for(UINT i = 0; i < 0xE00000; i++)
{
TestI(3);
}
DWORD e = GetTickCount();
DWORD d = e - s;
CString t;
t.Format("Time 0x%X", d);
AfxMessageBox(t);
}
void CTestDlg::OnBnClickedButton2()
{
DWORD s = GetTickCount();
for(UINT i = 0; i < 0xE00000; i++)
{
TestO(3);
}
DWORD e = GetTickCount();
DWORD d = e - s;
CString t;
t.Format("Time 0x%X", d);
AfxMessageBox(t);
} Result:
If-Else:
0xDC, 0xDC, 0xEC, 0xF0, 0xDC
? : operator:
0xFE, 0xF0, 0xFA, 0xF1, 0xFE
Maxwell Chen
|
|
|
|
|
I think it is not a problem if the compiler generates different code for looking-similar fragments when the optimization is turned off.
Since we are interested in faster code, we should turn the optimization on. But in this case we should take care that the compiler will not completely remove the fragments we investigate in our experiments. In order to prevent removing or in-lining of tested function and calls, we have to prepare our code using directives like volatile and __declspec(noinline) .
The experimental code for comparing code with optimizations can look like this:
int __declspec(noinline) TestI(int n)
{
volatile static int k = n;
if(n==0 || n==1)
return n;
return -1;
}
int __declspec(noinline) TestO(int n)
{
volatile static int k = n;
return (n == 0 || n == 1) ? n : -1;
}
void main()
{
const long N = 1000000000L;
DWORD s = ::GetTickCount();
for(long i = 0; i < N; ++i)
{
TestI(3);
}
DWORD t = ::GetTickCount() - s;
printf("%i\n", t);
s = ::GetTickCount();
for(long i = 0; i < N; ++i)
{
TestO(3);
}
t = ::GetTickCount() - s;
printf("%i\n", t);
}
In this case, the average time in case of VC++ 2003 compiler does not differ.
It should be more ways for performing accurate code-generation comparison in case the optimization is turned on.
In addition, this can be better checked by specifying a compiler option for generating intermediate Assembler code.
|
|
|
|
|
With your method,
NDEBUG, /MT, /Ot, /O2,
there is no difference between "if-else" and "?: operator" in the listing ASM code.
And regarding to the performance, ?: operator is a little faster.
Result:
9754 (if-else) (ignored, warm-up exercise)
9323 (? : ) (ignored, warm-up exercise)
9223 (if-else)
9214 (? : )
ASM code:
?TestI@@YAHH@Z PROC ; TestI, COMDAT
; 5 : volatile static int k = n;
mov eax, 1
test BYTE PTR ?$S1@?1??TestI@@YAHH@Z@4IA, al
jne SHORT $LN8@TestI
or DWORD PTR ?$S1@?1??TestI@@YAHH@Z@4IA, eax
mov DWORD PTR ?k@?1??TestI@@YAHH@Z@4HC, 3
$LN8@TestI:
; 6 : if(n==0 || n==1)
; 7 : return n;
; 8 : return -1;
or eax, -1
; 9 : }
ret 0
?TestI@@YAHH@Z ENDP ; TestI
?TestO@@YAHH@Z PROC ; TestO, COMDAT
; 13 : volatile static int k = n;
mov eax, 1
test BYTE PTR ?$S2@?1??TestO@@YAHH@Z@4IA, al
jne SHORT $LN8@TestO
or DWORD PTR ?$S2@?1??TestO@@YAHH@Z@4IA, eax
mov DWORD PTR ?k@?1??TestO@@YAHH@Z@4HC, 3
$LN8@TestO:
; 14 : return (n == 0 || n == 1) ? n : -1;
or eax, -1
; 15 : }
ret 0
?TestO@@YAHH@Z ENDP ; TestO
Maxwell Chen
|
|
|
|