|
Hello Friends
I am using tabcontrol first time in MFC.So,I have some question for this.
1.)I am creating a dilog in which at a time I have to show four tabs but maximum number of tabs are more than 200. As I saw that one tabCtrl showing only five tabs.
How can i Achieve this?
2.)On one tab ,i have to show seven buttons whose color will change on tab.So,fo that Do i need to create a dilaog with seven button and then add it into tab? But how Do i this for all tabs?
Thanks In Advance.
Regards
Yogesh
|
|
|
|
|
200 Tabs??
You should look into this google [^]and get an insight of what Tab control is and how to create tab controls. The links give you lots of links to other websites.
It is worth looking into some of them
Every new day is another chance to change your life.
|
|
|
|
|
Thanks For Reply.
i read all stuff related to Tab.
I came across to a problem.I am creating a tab on which I want to insert a dialog which is having seven buttons.
But when I use
m_ctlTab.inserItem for Dilaog in OnInitDialog(), it is crashing.
Do we need to set anything else to initialize tab?
Regards
Yogesh
|
|
|
|
|
yogeshs wrote: But when I use
m_ctlTab.inserItem for Dilaog in OnInitDialog(), it is crashing.
You need to use your debugger to find out exactly what is happening to cause the crash.
Binding 100,000 items to a list box can be just silly regardless of what pattern you are following. Jeremy Likness
|
|
|
|
|
Are you sure is crashing or just asserting? Most likely it is the latter and it looks something like this:
ASSERT(IsWindow(hwnd));
With limited info you gave in your post, I can only guess that tab object was not created (windows is not attached to the MFC object). You have to either call Create or subclass the tab control.
I would strongly suggest two things:
Reconsider 200 tabs; it seems a little too many to handle by the user (not to mention control).
Consider using property sheet (CPropertySheet) and property pages (CPropertyPage). Property pages behave like dialogs.
JohnCz
|
|
|
|
|
The msdn says #pragma pack(n) will change current alignment value to n.
But if n is zero, what will do?
|
|
|
|
|
it resets the packing to the default size
(actually, what it does depends on the compiler. some compilers don't support pack(0) at all, and some use it as a reset)
modified 22-Apr-12 14:33pm.
|
|
|
|
|
Nope. Default size is NOT stating a #pragma pack, which defaults to DWORD, ie 4 byte alignment in structures.
#pragma pack 0 means there is no packing between data members, so they are contiguous in memory.
--edit--
Actually I am talking crap. pack (1) makes data member contiguous in memory, pack (0) resets packing. DOh!
==============================
Nothing to say.
modified 23-Apr-12 4:37am.
|
|
|
|
|
Erudite_Eric wrote: pragma pack 0 means there is no packing between data members, so they are contiguous in memory.
no. that's pack(1) : align on single bytes.
pack(n) specifies the structure alignment, not the number of bytes between structs.
|
|
|
|
|
Doh! Quite correct.
==============================
Nothing to say.
|
|
|
|
|
Here n has to be 1,2 4, 8 ....
Now if don't specify any value or if the value is 0, then the members are packed to default packing size (which is 8 for many compilers).
However few compilers will throw compilation error.
|
|
|
|
|
Nope. Default size is NOT stating a #pragma pack, which defaults to DWORD, ie 4 byte alignment in structures.
#pragma pack 0 means there is no packing between data members, so they are contiguous in memory.
--edit--
Actually I am talking crap. pack (1) makes data member contiguous in memory, pack (0) resets packing. DOh!
(Just checked my code. Its been a few months since I did any, I guess the old memory is fading....)
==============================
Nothing to say.
modified 23-Apr-12 4:38am.
|
|
|
|
|
#pragma pack(0)
#include <iostream>
using namespace std;
struct Test
{
char a;
int i;
};
void main()
{
cout<<sizeof(Test)<<endl;
}
I am using VS2008 SP1. The build is x86.
Now guess the result of sizeof(Test) ??
|
|
|
|
|
5
==============================
Nothing to say.
|
|
|
|
|
I am reading 8 on my console.
|
|
|
|
|
Yeah, it is 8, DWORD alignment. I got it wrong...
==============================
Nothing to say.
|
|
|
|
|
|
#pragme pack 0 takes out all pading between data members in a struct so they are contiguous in memory. Very useful indeed since pretty much every data stream has no padding since it wastes bandwidth so being able to cast a chunk of memory to some zero packed struct gives you immediate and easy access to those data members.
Consider an ethernet framed IP packet containing UDP and DHCP data. You can build a struct to grab the IP address requested directly from the data.
--edit--
Actually I am talking crap. pack (1) makes data member contiguous in memory, pack (0) resets packing. DOh!
==============================
Nothing to say.
modified 23-Apr-12 4:39am.
|
|
|
|
|
Why don't you continue reading MSDN ?
#pragma pack documentation[^] states:
Valid values are 1, 2, 4, 8, and 16.
Hence 0 is 'not valid' (I wouldn't try to make assumptions on a value marked as such).
Veni, vidi, vici.
|
|
|
|
|
Just after read MSDN, I found that the case n=0 is ignored. I do not know why.
|
|
|
|
|
Simply because it's not explicitly handled.
Without giving the directive a special meaning for n=0, it makes perfect sense - it keeps the use of the directive consistent.
|
|
|
|
|
yu-jian wrote: But if n is zero, what will do?
Add /WX to your compiler settings and recompile. You should pay more attention to compiler warnings.
Best Wishes,
-David Delaune
|
|
|
|
|
There is a error that Visual Studio 2008 only supports 1, 2, 4, 8... After add /WX to compiter.
|
|
|
|
|
See the documentation[^], which clearly states that the only valid values for n are 1, 2, 4, 8 and 16. Thus using 0 is an invalid #pragma and will be ignored: the default packing (8) will be used.
Binding 100,000 items to a list box can be just silly regardless of what pattern you are following. Jeremy Likness
|
|
|
|
|
Thank you for everyone's replies.
|
|
|
|