|
|
How's that possible.. Global variables are initialize first then only main function is called... Try creating a simple console application.. with a global variable..
nave
|
|
|
|
|
|
Naveen R wrote: In a MFC Dialog based application there is global varaible of app class.. So before calling the main funtion surely its constructor is called..isn't it?
Yes, constructor will be called first, you are right. I didn't remember that the application was global. When I write a console app with a kind of app object, I aleays declare it inside the main function, that's why I didn't think of that
|
|
|
|
|
kiran janaswamy wrote: OnInitDialog(...)
How can u say that OnInitDialog is the first function that is been called in a dialog based application?
I think it is the constructor of the app class that is been called first...
Even if ur saying about a Dialog class there are so many other functions that gets called before OnInitDialog..say PreSubClassWindow(), etc including the constructor of the dialog class;)
nave
|
|
|
|
|
Naveen R wrote: I think it is the constructor of the app class that is been called first...
What About CWinApp or CDialog Derived Class Constructor
"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
|
|
|
|
|
ya I mean the same, not CWinApp constrcutor
nave
|
|
|
|
|
Naveen R wrote: ya I mean the same, not CWinApp constrcutor
i am jokin buddy!
"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
|
|
|
|
|
1.)How is the message being transformed from one class to other? Diagrammatically show which class is getting the message first.
Ans
In MFC ,CCmdTarget is the class responsible for message routing
4.)what would be the first function called if we create a mfc application if it is a dialog based and not a dialog based?
Ans
What ever may be the application type the first method to be called is Constructor followed by InitInstace.Inorder to understand what happens inside have a look over this article http://www.codeproject.com/cpp/mfcprogflow.asp[^]
AppU
|
|
|
|
|
|
I create a button in a flexgrid, and want to get the BN_CLICKED message of the button. though I add the ON_BN_CLICKED in MESSAGE_MAP,still can't run into onbutton1().
is it the only way that Override OnCommand()?
.h class
class CProjDlg : public CDialog
{
...
public:
CMSFlexGrid m_FlexGrid;
private:
CButton m_btn;
....
<big>afx_msg void OnButton1();</big>
}
#define IDC_MYBUTTON 1999
.cpp creat button
BEGIN_MESSAGE_MAP(CProg5Dlg, CDialog)
//{{AFX_MSG_MAP(CProg5Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
<big>ON_BN_CLICKED(IDC_BUTTON1, OnButton1)</big>
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
create the button from the flexgrid
void CProg5Dlg::InitControls()
{
....
m_btn.Create("btn",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(100,40,140,120<big>),&m_FlexGrid</big>,1999);
..
}
void CProjDlg::OnButton1()
{
// TODO: Add your control notification handler code here
AfxMessageBox("button click");
}
|
|
|
|
|
You shouldn't specify the FlexGrid as parent (all the commands will be sent to this window instead of your dialog). Replace &m_FlexGrid by this .
|
|
|
|
|
if the parent is this, the button will be covered by flexgrid.
even if I use m_btn.ShowWindow(SW_SHOW), the button can't click at all.
|
|
|
|
|
Use m_btn.BringWindowToTop(); to bring the button on top of the flexgrid.
|
|
|
|
|
okey,I'll have a try;
You are real my saviour and teacher!
thank you very much!
|
|
|
|
|
that's wonderful!
and I thought another way, but there is still a small problem.
I use ClassWizard to create a new CButton-derived class named CFButton.and then create CBTGrid class derived from the MSFlexGrid class.
in CBTGrid class, define CFButton m_fButton;
and create the button in void CBTGrid::::PreSubclassWindow()
m_fButton.Create("button",WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,CRect(0,0,100,100),this,2000);
in CFButton class,add BN_CLICKED in message map below:
ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
void CFButton::OnClicked()
{
AfxMessageBox("ok now");
}
It is basically ok now. the only problem is tcan't catch the first time clike.
for example, I use CFButton create a batch of button in flexgrid;
after the first time click on any of the button, every click are ok;
what's the first time click do? how to avoid it?
|
|
|
|
|
It seems to be a very complicated solution
zeus_master wrote: what's the first time click do? how to avoid it?
Perhaps because you need to set the focus to your control ?
Does BringWindowToTop work ?
|
|
|
|
|
thanks, the BringWindowToTop() works well.
I add m_fButton.SetFocus()after m_fButton.Create(...);
It's still useless,
In the same way, I add a CFEdit derived from CEdit class,the first click or enter char are ok.
|
|
|
|
|
yes,you are right, the first click miss is due to set the focus of flexgrid.
the first mouse click in the flexgrid area,no matter which sub control is clicked, the focus is set to the sub control or flexgrid.
so,I want to add the set focus code in CBTGrid class function flexgrid OnMouseMove, while mouse move over flexgrid,set the focus right away;
void CBTGrid::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMSFlexGrid::OnMouseMove(nFlags, point);
CBTGrid::OnSetFocus(CWnd* pOldWnd);
}
now,the problem is how can I get the CWnd* pOldWnd?
or there is another good idea?
I'm appreciated your suggestion
|
|
|
|
|
Don't call OnSetFocus (the functions starting with 'On' are called automatically, you won't call them directly). Instead use SetFocus.
Cédric Moonen
Software developper
Charting control
|
|
|
|
|
wow, your Charting control is a excellent tutorial for me!
yes, SetFocus is ok now.
but every mousemove will spring the code; I wanna know is there any method for judging that the focus have been set to the flexgrid or the sub controls?
if not set yet, then set the focus, or not set.
void CBTGrid::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMSFlexGrid::OnMouseMove(nFlags, point);
if (...focus is not on flexgrid or it's sub controls....){ SetFocus();
}
}
|
|
|
|
|
I don't think this will make a big difference.
Anyway, why don't you use BringWindowToTop ? It's much more cleaner than making a kind of hybrid control .
Also, there is a lot of informations in the MSDN, try to use it because it is very helpfull.
zeus_master wrote: wow, your Charting control is a excellent tutorial for me!
Thanks
Cédric Moonen
Software developper
Charting control
|
|
|
|
|
Cedric Moonen wrote: I don't think this will make a big difference.
Anyway, why don't you use BringWindowToTop ?
as you know,I need create many buttons(more than 200) for the flexgrid, and some other controls in the cell, BringWindowToTop function must reset after flexgrid create/change/resize.....the code become more difficult for management.
Cedric Moonen wrote: Also, there is a lot of informations in the MSDN, try to use it because it is very helpfull.
yes,but it is very difficult to find
|
|
|
|
|
sorry for disturbing you so many times.
I found I'm real a fool.
Only a simple way is add the WM_MOUSEMOVE message for CFButton class, then add SetFocus();
whether or no, thank you very much.
|
|
|
|
|
Hello everyone!My first post so i\m kinda nervous
What's my problem:just started visual c++ and i'm trying hard to make a child window for my app(a single document made with app wizard ). I have some stuff happening in the main window and i want to be able to pop up a new window showing the status of some parameters from the main window and also to be able to control them from that second window. I would really appreciate a link or something to help me with this
|
|
|
|