|
1. the compiler treat M very nicely; &m is the address, as for the other, I don't know.
2. huh ? without knowing the class/struct; with a class declaration, you can't ( but I must be wrong )
3.you can't. the best you can do if find if it matches an existing type; with dynamic_cast<type>, you will know if the variable is of type Type.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
1. A struct definition is a way to tell the compiler that: Whenever a variable of type struct is declared, it must allocate memory, at least, the size that the struct definition defines.
Let's declare a struct:
typedef struct tagMyStruct
{
int theInteger;
char theCharacter;
}
MyStruct;
Then we declare a variable of this type:
MyStruct theVariable;
char * pointerToCharacterMember;
theVariable.theInteger = 42;
theVariable.theCharacter = 'A';
When the compiler handles the variable declaration, it must find an offset in memory to put it. Let's say it puts it at 0x0001000.
For sizeof(MyStruct), the compiler should return sizeof(int) + sizeof(char), which is 4 + 1.
For simplicity of the example, I've chosen to use pointers. Let's do this:
pointerToCharacterMember = &theVariable.theCharacter;
To get the address that pointerToCharacterMember should point to, the compiler gets the address of theVariable. To get the address of the member theCharacter, it must add the size of the member theInteger. So the address pointed to by pointerToCharacterMember, should be 0x0001004.
In memory the variable would look like this:
memory offset Value
-------------- --------------
0x00001000 0x2A ; This is where theVariable is placed, it is also the address of theInteger.
0x00001001 0x00
0x00001002 0x00
0x00001003 0x00
0x00001004 0x41 ; This is the address of theCharacter
Now, I've actually lied to you all the time , the sizes and addresses are not computed exactly like this, because the compiler optimizes for running on CPU's that prefer variables to start on certain boundaries.
So the size of our struct would NOT be sizeof(int) + sizeof(char), but rather sizeof(int) + (n bytes) + sizeof(char) + (n bytes).
2. You can't. The compiler takes all your method names and variable names and translates them into addresses. When the code is compiled, there will be no such thing as a class A, the objects exists solely on design time, and besides RTTI, there is no nifty runtime features like the reflection APIs in Java and .NET.
3.Wiltein wrote:
but what I need is the real type,not its name.
But you've allready GOT the real type, otherwise you couldn't get it's name!?...
"After all it's just text at the end of the day. - Colin Davies
"For example, when a VB programmer comes to my house, they may say 'does your pool need cleaning, sir ?' " - Christian Graus
|
|
|
|
|
Hi…
How r u?
What’s going on? Hope every thing is well.
I need any idea in VC++.
Background: There is a form or dialog which is picking too many values from database & taking time to manipulate those values.
Problem: Now I want to retain or save all values in all controls on dialog when second time user open that dialog instead of reload from database.
Question: Is there any class can be used to retain all values of all controls on dialog & can be retain on next opening of dialog.
If you have any idea, please let me know. I’m waiting…
OK! Have a nice day.
With Best Regards
Sumit Kapoor
Never consider anything impossible before trying to solve that..---Sumit Kapoor--- sumit_kapoor1980@hotmail.com
|
|
|
|
|
There's no automatic way that I know of, you need to do this manually.
I did something similar, I keep the variable in static member variable for each class that I create; so that the values are kept; but that only works within one "run" of the program, if you need them to work between "runs" you will need to save them on disk, either in a registry or in a file.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
You will probably need to make a simple text file. This can be done by using serialization. I haven't done any serialization stuff in a while, so I'm kinda rusty. But I did it in a CFormView-derived class. In the CDocument's save, I also used the CArchive member to serialize my objects that I wanted returned to their previous state. I think if you do this you will also have to change IMPLEMENT_DYNAMIC and DECLARE_DYNAMIC to IMPLEMENT_SERIAL and DECLARE_SERIAL.
Who are all these people and what are they doing in my house?...Me in 30 years, inside a grocery store
My articles[^]
bdiamond
|
|
|
|
|
Hi,
Thanks for suggesting me solution,
I used following article for saving data,
http://www.codeproject.com/dialog/dlgset.asp
This article use trick & save all control's data in registry.Nice one.
Thanks again
Have a Nice Life.
Sumit Kapoor
Never consider anything impossible before trying to solve that..---Sumit Kapoor--- sumit_kapoor1980@hotmail.com
|
|
|
|
|
it fails to retrieve newly intruduced data by the user.
i tried this ...
AfxGetApp()->WriteProfileString("Settings", "email", EDIT1);
UpdateData(FALSE);
and this..
CDHtmlDialog::GetElementText(_T("email"));
if(CDHtmlDialog::GetElementText(_T("email")))
{
EDIT1=_T("works");
}
else
{
EDIT1=_T("it doesn't work");
}
i tried many combination and searching answer, but i can't find one right.
this is qwhat i do on init
BOOL Cfirstw32mfcDlg::OnInitDialog()
{
..
..
..
...
EDIT1 = AfxGetApp()->GetProfileString("Settings", "email", "your login");
EDIT2 = AfxGetApp()->GetProfileString("Settings", "password", "details here..");
UpdateData(FALSE);
//EDIT1=("");
//EDIT2=("");
UpdateData(FALSE);
return FALSE; // return TRUE unless you set the focus to a control
}
EDIT1 and EDIT2 contain values, either from the register or the alternative 'default value'and it wil be displayed in the userinterface
it's also visible in the userinterface, but if i intruduce values manualy and press ok,
'UpdateData(FALSE);' doesn't update anything, nor UpdateData();,UpdateData(TRUE); or UpdateDialogControls(this, FALSE);
i tried resting the values as u can see, but than the entries in the registry are also empty
what am i doing wrong here
thanx for your time and kind regards,
marco
// firstw32mfcDlg.cpp : implementation file
//
#include "stdafx.h"
#include "firstw32mfc.h"
#include "firstw32mfcDlg.h"
#include ".\firstw32mfcdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// Cfirstw32mfcDlg dialog
BEGIN_DHTML_EVENT_MAP(Cfirstw32mfcDlg)
DHTML_EVENT_ONCLICK(_T("ButtonOK"), OnButtonOK)
DHTML_EVENT_ONCLICK(_T("ButtonCancel"), OnButtonCancel)
DHTML_EVENT_ONCHANGE(_T("email"), OnEnChangeEdit1 )
DHTML_EVENT_ONCHANGE(_T("password"), OnEnChangeEdit2 )
END_DHTML_EVENT_MAP()
Cfirstw32mfcDlg::Cfirstw32mfcDlg(CWnd* pParent /*=NULL*/)
: CDHtmlDialog(Cfirstw32mfcDlg::IDD, Cfirstw32mfcDlg::IDH, pParent)
//, m_EDIT1(0)
//, m_EDIT2(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void Cfirstw32mfcDlg::DoDataExchange(CDataExchange* pDX)
{
CDHtmlDialog::DoDataExchange(pDX);
DDX_DHtml_ElementInnerText(pDX, _T("email"), EDIT1);
DDX_DHtml_ElementInnerText(pDX, _T("password"), EDIT2);
DDX_DHtml_ElementInnerText(pDX, _T("Temp_Text1"), m_EDIT2);
DDX_DHtml_ElementInnerText(pDX, _T("Temp_Text2"), m_EDIT2);
}
BEGIN_MESSAGE_MAP(Cfirstw32mfcDlg, CDHtmlDialog)
ON_WM_SYSCOMMAND()
//}}AFX_MSG_MAP
//ON_EN_CHANGE(IDC_EDIT1, OnEnChangeEdit1)
//ON_EN_CHANGE(IDC_EDIT2, OnEnChangeEdit2)
END_MESSAGE_MAP()
// Cfirstw32mfcDlg message handlers
BOOL Cfirstw32mfcDlg::OnInitDialog()
{
CDHtmlDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//EDIT1=("");
//EDIT2=("");
EDIT1 = AfxGetApp()->GetProfileString("Settings", "email", "your login");
EDIT2 = AfxGetApp()->GetProfileString("Settings", "password", "details here..");
UpdateData(FALSE);
//EDIT1=("");
//EDIT2=("");
UpdateData(FALSE);
return FALSE; // return TRUE unless you set the focus to a control
}
void Cfirstw32mfcDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDHtmlDialog::OnSysCommand(nID, lParam);
}
}
void Cfirstw32mfcDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDHtmlDialog::OnPaint();
}
}
// The system calls this function to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR Cfirstw32mfcDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
HRESULT Cfirstw32mfcDlg::OnButtonOK(IHTMLElement* /*pElement*/)
{
CDHtmlDialog::GetElementText(_T("email"));
if(CDHtmlDialog::GetElementText(_T("email")))
{
EDIT1=_T("works");
}
else
{
EDIT1=_T("it doesn't work");
}
AfxGetApp()->WriteProfileString("Settings", "email", EDIT1);
GetElementText(_T("password"));
AfxGetApp()->WriteProfileString("Settings", "password", EDIT2);
OnCancel();
//AfxGetApp()->WriteProfileString("Settings", "email", EDIT1);
//AfxGetApp()->WriteProfileString("Settings", "password", EDIT2);
//OnOK();
//return S_OK;
return NULL;
}
HRESULT Cfirstw32mfcDlg::OnButtonCancel(IHTMLElement* /*pElement*/)
{
GetElementText(_T("email"));
if(GetElementText(_T("email")))
{
EDIT1=_T("works");
}
AfxGetApp()->WriteProfileString("Settings", "email", EDIT1);
GetElementText(_T("password"));
AfxGetApp()->WriteProfileString("Settings", "password", EDIT2);
OnCancel();
return S_OK;
//return 0;
}
HRESULT Cfirstw32mfcDlg::OnEnChangeEdit1(IHTMLElement* /*pElement*/)
{
//CDHtmlDialog::GetElementText(EDIT1);
//UpdateDialogControls(this, FALSE);
//UpdateData(FALSE);
AfxGetApp()->WriteProfileString("Settings", "email", EDIT1);
return FALSE;
}
HRESULT Cfirstw32mfcDlg::OnEnChangeEdit2(IHTMLElement* /*pElement*/)
{
//UpdateData(FALSE);
AfxGetApp()->WriteProfileString("Settings", "password", EDIT2);
return FALSE;
}
// firstw32mfcDlg.h : header file
//
#pragma once
// Cfirstw32mfcDlg dialog
class Cfirstw32mfcDlg : public CDHtmlDialog
{
// Construction
public:
Cfirstw32mfcDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
enum { IDD = IDD_FIRSTW32MFC_DIALOG, IDH = IDR_HTML_FIRSTW32MFC_DIALOG };
CString EDIT1;
CString EDIT2;
CString m_EDIT1;
CString m_EDIT2;
CString m_TEMP_EDIT1;
CString m_TEMP_EDIT2;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
HRESULT OnButtonOK(IHTMLElement *pElement);
HRESULT OnButtonCancel(IHTMLElement *pElement);
HRESULT OnEnChangeEdit1(IHTMLElement *pElement);
HRESULT OnEnChangeEdit2(IHTMLElement *pElement);
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
DECLARE_DHTML_EVENT_MAP()
public:
//char m_EDIT1;
//char m_EDIT2;
//afx_msg void OnEnChangeEdit1();
//afx_msg void OnEnChangeEdit2();
};
it gives a headache, knowing so much and stil not knowing anything
|
|
|
|
|
I think you can go for simple registry class known CRegKey defined in atlbase.h
-----------------------------
"I Think It Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
no it works wel, but not when i click the button.
BOOL Cfirstw32mfcApp::InitInstance()
{
SetRegistryKey(_T("Natural_Demon"));
..
..
}
// this part works wel
EDIT1 = AfxGetApp()->GetProfileString("Settings", "email", "your login");
EDIT2 = AfxGetApp()->GetProfileString("Settings", "password", "details here..");
UpdateData(FALSE);
this part work wel also, i faild the retireve the data from the interface, although i use"UpdateData(FALSE);"
i can paste it anywhere in the script, but if i use this "Cfirstw32mfcDlg::OnButtonOK()"
HRESULT Cfirstw32mfcDlg::OnButtonOK(IHTMLElement* /*pElement*/)
{
UpdateData(FALSE);
AfxGetApp()->WriteProfileString("Settings", "email", EDIT1);
return FALSE; // return TRUE unless you set the focus to a control
...
..
}
it fails to retrieve the fresh data
kind regards,
marco
|
|
|
|
|
Hi
In my application i am using createprocess() function to run an exe. once if i close the application, process will get terminated automatically. thats fine. but if i call openprocess() with that old process id,still it is returning some non null process handle. this is there only in windows xp (not in windows 2000,etc).i need solution for this issue
Thanks
JP
ALL THINGS ARE POSSIBLE UNTIL THEY ARE PROVED IMPOSSIBLE-AND EVEN THE IMPOSSIBLE MAY ONLY BE SO,AS OF NOW
|
|
|
|
|
|
Hello
I create a MFC aplication, and in my cpp file, i define a variable C++
string str;
I know that, i can use CString, but i want to know why it appears "error link"
when i compile project, it appears error (error link) like that
"Linking...
msvcprtd.lib(MSVCP60D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char="">,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char="">,class std::allocator<char> >(void)" (??1?$basic_strin
g@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in ocl.lib(ora.obj)
msvcprtd.lib(MSVCP60D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char="">,class std::allocator<char> >::basic_string<char,struct std::char_traits<char="">,class std::allocator<char> >(class basic_string<char,s
truct std::char_traits<char="">,class std::allocator<char> >::allocator<char> const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$allocator@D@1@@Z) already defined in ocl.lib(ora.obj)
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Bin/BMSOracleView.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
"
|
|
|
|
|
|
The ocl.lib is your or third-party library?
Robert-Antonio
"Friends come and leave, but teddybears stay in forever."
|
|
|
|
|
try inclding the lines at ur stdafx.h
using namespace std;
replace string with std::string and I hope u have not forgotten to include
#include <string.h>
Dharani babu S
redindian
|
|
|
|
|
I think that it isn't the case. If you forget the std namespace, you will get an Undeclared identifier error, not linker error.
Robert-Antonio
"What do you mean, I can't initialize things in an assert()?"
|
|
|
|
|
What I'd like to do is this..
When I put '1' to the edit ctrl, the contents of editctrl should be changed to '2', if '2', then should be '3' and so forth..
That's why I used EN_CHANGE event handler..
In the handler, at first I read the int value of edit ctrl by GetdlgItemInt API.
then add 1 to the value,
finally called SetDlgItemInt with the new changed value..
But the result was the infinite loop..
does that make sense?
That's because SetDlgItemInt API cause new EN_CHANGE event.. before the first event finished the job..
How can I solve that problem?
As I said before, the contents of edit ctrl should change simultaously as I typed the value..
|
|
|
|
|
Have you tried using SetWindowText() instead???
How do I print my voice mail?
|
|
|
|
|
sure..
It also cause infinite loop
|
|
|
|
|
Simply use a flag in your OnChange handler. Set it to true before calling SetDlgItemInt and set to false afterwards. At the start of your handler, check the flag.
CMyDlg::OnChangeMyEdit()
{
static bool flag = false;
if (!flag)
{
UINT number = GetDlgItemInt(IDC_MY_EDIT, NULL, FALSE);
number++;
flag = true;
SetDlgItemInt(IDC_MY_EDIT, number, FALSE);
flag = false;
}
}
"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!
|
|
|
|
|
Thanks, That's what I wanted..
That's kind of trick anyway,
but it seem to be the best way..
|
|
|
|
|
i want to use flash in vc++.
please help me.
how to use flash in vc++.
|
|
|
|
|
you need to actually ask a question
what do you want to do?
Bryce
---
To paraphrase Fred Dagg - the views expressed in this post are bloody good ones.
--
Publitor, making Pubmed easy.
http://www.sohocode.com/publitor
Our kids book :The Snot Goblin
|
|
|
|
|
i need flash control in vc++.how to use it.what i use dll or ocx(activex).i want Macromedia Flash play on my application dialog.VB support flash.I don't know that VC++ is support or not.please help me.
|
|
|
|
|
Hi,
I want to create a SDI application with toolbars.
If I click on each tool, it will open up a dialog box.
I want to diaply the content of a particular edit control from a dialog box to the SDI window?
How can I do that? any help is highly appreciated.
Thanks,
|
|
|
|
|