|
Just use WMI (Windows Management Instrumentation) to retrieve hardware stuff.
class name = "Win32_NetworkAdapter"
property name = "MACAddress"
|
|
|
|
|
How about:
for (int x = 0; x < pAdapterAdd->PhysicalAddressLength; x++)
TRACE("%02X:", pAdapterAdd->PhysicalAddress[x]);
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
What are the issues I need to be careful about here?
I have a simple MFC app wizard dialog that allows users to browse for various data files, data is then loaded into various controls and items on the dialog. When a set of manual data is entered and an add data button is clicked, I want another dialog to open up - it needs to have brought some data with it from the first dialog as it's supposed to find the closest matching data point in the original dialog and offer that as a suggestion in the 2nd dialog, the user can then accept that (in which case the 2nd dialog closes, and the suggested data is added to the controls on the main dialog), or cancel it (nothing happens in main dialog as 2nd dialog closes), or by selecting a different option in a listbox (populated by options determined by whats in the main dialog), the user can OK to close the 2nd dialog and have the data placed in the appropriate section of the controls.
I believe I just set up my 2nd dialog and then have a Domodal call to open it and test for its return code, but are there any tricks/traps I need to be aware of, and whats the "best" way to handle the data between the two - as separate dialogs, I can't for example include an array or class within the main dialog can I? do i need to use global data or is there a better way to pass/share info between dialogs
t.i.a
|
|
|
|
|
You can create your dialog and when you need to it on other dialog use of ShowWindow(SW_SHOW/SW_HIDE) .If you want to use of value or controls in other dialog you can use
CMain *m_Main=(CMain*)GetParent();
m_Main->variable or values
|
|
|
|
|
you can put the fields in the "child" dialog.
doing this, you populate their default value when constructing the dialog object (before displying it) through the constructor for instance.
then, the child dialog modifies the fields and exits.
what you have to do is checking if the Ok button was pressed (instead of Cancel, in the case of a OKCANCEL dialog) and then read the fields modified in the child dialog object ; for this, i advise you writting accessors (get methods) rather than letting the fields public
|
|
|
|
|
First, pack your data in a class
class CMyData
{
int m_iInt;
CString m_strString;
}
Put a copy constructor and an = operator for your class.
Then have an instance in your CMainDlg (say CMyData m_MainData )
In your CChildDlg, have another instance (say CMyData m_ChildData )
So in your handler,
CMainDlg::GetNewData()
{
CChildDlg cd();
cd.CopyData(m_MainData)
_OR_
CChildDlg cd(m_MainData)
_OR_
CChildDlg cd();
cd.m_ChildData = m_MainData
if (ID_CANCEL!=cd.DoModal())
{
m_MainData = cd.m_ChildData
}
}
You will need the copy operation anyway, so better put it in the <code>CMyData</code> class.
What you must not do is get a pointer on the data in the main dlg from within the child dlg and modify the data directly, because you will not know if the user cancels the operation, so you need a buffer (in our case, m_ChildDat a)
Company policy : no access to the internet but CP
~RaGE()
|
|
|
|
|
I know this is a simple question that I will regret answering. I am currently working in Borland C++ Builder (VCL) on adding some serial port activity to an older Windows project. No .NET (just yet). Rather than character by character processing messages (NMEA) from a number of serial ports I would like something simple like 'Readline' in .NET2 or an 'fgets'. Reading to a '\n' and timeout. I have done a bit of searching and found a lot of read character by character examples. Does anyone have the magic line at hand of code or recall how to read a text line?
|
|
|
|
|
jrgrobinson wrote: Rather than character by character processing messages (NMEA) from a number of serial ports I would like something simple like 'Readline'
With the ordinary serial port driver you simply cannot do this. Each character is transmitted as a groupd of bits consisting of a start bit, the actual character value, parity bits and one or two stop bits. There's no way for the hardware to know how you want to separate messages from each other; it should not since it's the wrong OSI layer for that.
It is for an application to handle this kind of situations, or some kind of service or "daemon".
I suggest that you implement a worker thread that reads the port, assembles the NMEA messages and puts them into a queue. When a complete new message has arrived and has been put in the queue, the worker thread signals the main thread to inform that there is a new message in the queue.
In your worker thread you have to read byte-wise and each NMEA message will start with '$' and end with '\n', if I remember correctly.
This way you won't bother the main thread until there's a complete NMEA message in the queue.
Have a look at Joe Newcomer's article about serial port programming here[^]. I don't know if the article is applicable for Borland C++ Builder, but it addresses some issues that you probably should think of anyway.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|
|
Thanks Roger. It does seem like the standard exhaustive read is my more intelligent option. I have been looking at some of the old MSDN (Allen Denver, Serial Communications in Win32, 1995) and there is an EV_RXFLAG which happens in response to an event character you can set in the DCB. That does mean Overlapped receiving though which is too much for this really simple task. I was hoping I could achieve that 'One-line' as .NET2 does with ReadLine. Makes for very simple code. Thanks again for your time in responding.
|
|
|
|
|
Hello,
How I can set active tab in IE7 ? I have BHO, so i know Handles of IE main window(s) and
all Internet Explorer_Server window(s).
For example, I run 2 Internet Explorers with 3 tabs inside each.
How can i set tab #2 inside IE #1 active (e.g. visible, selected, focused) ?
Thanx for help !
|
|
|
|
|
Hello comunity,
i create a new button on my dialog, is CFileDialogEx i modify them with new dialog controls,
now i need to bind a function with this one button, now i have customized CFileDialog with new controls!
I call "cMyButton.Ceate(...)" in OnInitDialog(), and cMyButton is member of CFileDialogEx.
Ok, button is showed, all other to, but without call my funktion : OnAddParam();
What is wrong, what i have to do to bind the funktion OnAddParam() wit my control?
thanks for answers
regards
break;
|
|
|
|
|
Do you have BS_NOTIFY when you create button (cMyButton.Create)
|
|
|
|
|
ups, no!
i dont have this in my Create function!!!
Here is my Create(i add BS_NOTIFY):
m_cAddNewParam.Create(L"Add new param", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_NOTIFY, cRect, pParentWnd, IDC_ADD_PARAM);
BEGIN_MESSAGE_MAP(CFileDialogEx, CFileDialog)
ON_BN_CLICKED(IDC_ADD_PARAM, OnAddParam)
END_MESSAGE_MAP()
dont work again, something else what i forgot to add?!
regards
break;
|
|
|
|
|
break; wrote: something else what i forgot to add?!
Nothing wrong with this code.
|
|
|
|
|
Hello Prasad,
i cant explain my self why my button dont run this function!!!
How do you make this? Any sample code?
regards
break;
|
|
|
|
|
break; wrote: m_cAddNewParam.Create(L"Add new param", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_NOTIFY, cRect, pParentWnd, IDC_ADD_PARAM);
It's not related to your problem, but the BS_NOTIFY style is not necessary.
The code you have will work, though. How do you have OnAddParam() defined?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Im not sure its your problem but I guess maybe its of IDC_ADD_PARAM.Anyway what happens if you run this code
#define IDC_TEST 1000
...
BEGIN_MESSAGE_MAP(Ctest1Dlg, CDialog)
ON_BN_CLICKED(IDC_TEST, OnBnClickedButton0)
END_MESSAGE_MAP()
DWORD Style=WS_CHILD|WS_VISIBLE|BS_NOTIFY|WS_EX_WINDOWEDGE|WS_TABSTOP|WS_BORDER;
m_Button.CreateEx(0,_T("BUTTON"),_T("Test"),Style,0,0,100,23,this->m_hWnd,(HMENU)IDC_TEST,0);
void Ctest1Dlg::OnBnClickedButton0()
{
MessageBox(_T("test"));
}
afx_msg void OnBnClickedButton0();
|
|
|
|
|
Hello WhiteSky,
i have exact like your sample, but dont work,
ok, is little different.
#define IDC_ADD_PARAM 1130
BEGIN_MESSAGE_MAP(CFileDialogEx, CFileDialog)
ON_BN_CLICKED(IDC_ADD_PARAM, OnAddParam)
END_MESSAGE_MAP()
BOOL CFileDialogEx::OnInitDialog()
{
m_cAddNewParam.CreateEx(0 ,L"BUTTON", L"name", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
cRect.left, cRect.top, 100, 25, pParentWnd->m_hWnd, (HMENU)IDC_NEWPARAM, 0);
class CFileDialogEx : public CFileDialog
{
DECLARE_DYNAMIC(CFileDialogEx)
public:
CWnd m_cAddNewParam;
protected:
afx_msg void OnAddParam();
So i use other solution:
i create a new little dialog, put all controls what i need on them,
and include this dialog on my extended CFileDialog, so i have customized own CFileDialog.
For the future, i like to know why this dont work!
thanks for help
break;
|
|
|
|
|
Hi break;
If you declare CButton m_cAddNewParam; instead CWnd m_cAddNewParam; and insert BS_NOTIFY what happens?
|
|
|
|
|
Hi,
nothing happens, the same!
Ok, i think i use the solution with extra dialog with controls,
like in the answer before, that works!
thanks
break;
|
|
|
|
|
I was working with custom dialog(GetOpenFileName)and it was good.Did you check for IDC_ADD_PARAM 1130 is it a unique value ?
|
|
|
|
|
I think problem is on the detialy because if you run this code on the a project you can see a button and it response to clicks
|
|
|
|
|
Hi All,
when i call loadXML there is some memory leak.
please give me a solution to avoid memory leak.
|
|
|
|
|
voorugonda prashanth wrote: please give me a solution to avoid memory leak.
delete your pointers, or use smart pointers
|
|
|
|
|
voorugonda prashanth wrote: when i call loadXML there is some memory leak
How you are verifying this ? Can you show code ?
voorugonda prashanth wrote: please give me a solution to avoid memory leak.
Release memory allocated. As already suggested use smart pointers.
Delete memory allocated using new .
|
|
|
|
|