|
I'm very familiar with C/C++ Console Applications and Visual Basic programming. I'm having a tought time with Visual C++ Edit Boxes. I can't figure out how to format an editbox for hexadecimal data, input data and output data. I downloaded a few tutorials and demos on edit boxes, which were a great start for edit boxes in general, but none specifically address this topic.
Here is what I'm trying to do....
Supposing that you have a form with 3 edit boxes and a button. The user will input a 1 byte hexadecimal number into edit box1 and edit box2. When the user clicks the button, the hexadecimal values in edit box1 will be subtracted from the value in edit box2. The answer will be displayed in hexadecimal format in edit box3. One other thig is that I want to filter the input data "on the fly", only allowing the user to type the numbers and characters 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F into edit box1 and edit box2. Any other letters will be rejected and not accpted.
If anyone has some simple code examples that can help me I'd greatly appreciate it. Thanks..
Freddie.
|
|
|
|
|
I created a project with VS.2002 and do a lot of coding, now I want to change the exe file that compiler buid, where should I change the setting to create new exe file? I don't wanna create new project with new name. Any solution for it?
Mazy
"A bank is a place that will lend you money if you can prove that you don't need it." - Bob Hope
|
|
|
|
|
Mazdak wrote:
don't wanna create new project with new name
no please
I havent used VS.NET but i guess there must be a link tab somewhere in the project settings where you have to provide the outfile name. there you can change the name of the exefile name.
This space is empty.
|
|
|
|
|
Thanks, yes , it was somewhere in properties for project.
Mazy
"A bank is a place that will lend you money if you can prove that you don't need it." - Bob Hope
|
|
|
|
|
Project Properties|Linker|General|Output File
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
Thanks.
Mazy
"A bank is a place that will lend you money if you can prove that you don't need it." - Bob Hope
|
|
|
|
|
Hello everyone
My question actually referrs to Borland C++ Builder 6.0. I'm trying to make a program minimize to the system tray using the TrayIcon sample from C++ Builder, but I get an error message:
"Cannot create system shell notification icon"
Can anyone, please, help me figure this out?
Thank you
|
|
|
|
|
http://www.bcbdev.com/faqs/faq73.htm
|
|
|
|
|
I have a worker thread i created in a dialog box. I want to run a thread till i either press the stop button or it finds a winnner. that part works fine. But i have an edit box called number of players with an int variable of m_win; I put inside the tread m_win=counter; UpdateData(FALSE); and the program will compile and run but as soon as it hits UpdateData(False); i get an assert error in reference to wincore.cpp 884. I read the information online about it and basically its saying either its a bug in vc++ or i'm coding it wrong. I think i'm coding it wrong cause i installed all the service packs. could someone please take the time and shed some light on this for me. If updatedata(false) can not be used how can i update my data? I know i can make a button that updates it but defeats the point.
thanks,
tony
////////////////cpp file for the dialog box////////////////
UINT CCash3mfcDlg::StartThread(LPVOID param)
{
THREADSTRUCT* ts = (THREADSTRUCT*)param;
ts->_this->run();
//here is the time-consuming process which interacts with your dialog
return 1;
}
void CCash3mfcDlg::Ongobutton()
{
THREADSTRUCT *_param = new THREADSTRUCT;
_param->_this = this;
AfxBeginThread (StartThread, _param);
UpdateData(TRUE);
}
int CCash3mfcDlg::run()
{
counter = 0;
bool win=false;
stop=false;
int random1,random2,random3;
m_processstatus.SetRange (1, 1000);
while (stop==false&&win==false)
{
m_win=counter;
Sleep(50);
random1 = rand()%5;
random2 = rand()%5;
random3 = rand()%5;
switch (random1)
{
case 0:
m_ball1.SetIcon(m_h0);
break;
case 1:
m_ball1.SetIcon(m_h1);
break;
case 2:
m_ball1.SetIcon(m_h2);
break;
case 3:
m_ball1.SetIcon(m_h3);
break;
case 4:
m_ball1.SetIcon(m_h4);
break;
}
switch (random2)
{
case 0:
m_ball2.SetIcon(m_h0);
break;
case 1:
m_ball2.SetIcon(m_h1);
break;
case 2:
m_ball2.SetIcon(m_h2);
break;
case 3:
m_ball2.SetIcon(m_h3);
break;
case 4:
m_ball2.SetIcon(m_h4);
break;
}
switch (random3)
{
case 0:
m_ball3.SetIcon(m_h0);
break;
case 1:
m_ball3.SetIcon(m_h1);
break;
case 2:
m_ball3.SetIcon(m_h2);
break;
case 3:
m_ball3.SetIcon(m_h3);
break;
case 4:
m_ball3.SetIcon(m_h4);
break;
}
if (m_ticket1==random1&&m_ticket2==random2&&m_ticket3==random3)
{
win=true;
}
m_processstatus.StepIt ();
counter++;
}
m_ticket3=1;
m_processstatus.SetPos(0);
//AfxEndThread(0);
CWnd::MessageBox("THREAD IS DONE");
return 0;
}
void CCash3mfcDlg::Onstopbutton()
{
stop=true;
}
//HEADER FILE FOR DIALOG BOX///////////////
// cash3 mfcDlg.h : header file
//
#if !defined(AFX_CASH3MFCDLG_H__B03A0082_F3ED_448F_A5AC_56734A264BF3__INCLUDED_)
#define AFX_CASH3MFCDLG_H__B03A0082_F3ED_448F_A5AC_56734A264BF3__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CCash3mfcDlg dialog
class CCash3mfcDlg : public CDialog
{
// Construction
public:
CCash3mfcDlg(CWnd* pParent = NULL); // standard constructor
static UINT StartThread (LPVOID param); //controlling function header
typedef struct THREADSTRUCT //structure for passing to the controlling function
{
CCash3mfcDlg* _this;
} THREADSTRUCT;
// Dialog Data
//{{AFX_DATA(CCash3mfcDlg)
enum { IDD = IDD_CASH3MFC_DIALOG };
CEdit m_winupdate;
CStatic m_ball1;
CProgressCtrl m_processstatus;
CStatic m_ball3;
CStatic m_ball2;
int m_ticket1;
int m_ticket2;
int m_ticket3;
bool stop;
int m_draws;
int m_win;
int counter;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCash3mfcDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
///////////////////added by me///////////////////
HICON m_h0;//ball zero icon
HICON m_h1;//ball one icon
HICON m_h2;//ball two icon
HICON m_h3;//ball three icon
HICON m_h4;//ball four icon
/////////////////////////////////////////////////
// Generated message map functions
//{{AFX_MSG(CCash3mfcDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnDestroy();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void Ongobutton();
afx_msg int run();
afx_msg void Onstopbutton();
afx_msg void Update();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CASH3MFCDLG_H__B03A0082_F3ED_448F_A5AC_56734A264BF3__INCLUDED_)
|
|
|
|
|
|
Michael Dunn wrote:
It is dangerous to pass C++ objects from one thread to// another
If a pointer to the object is passed or a handle is passed to another thread. but still the two threads are sharing the same resource, so there is still bound to be problems either ways, rite ?
When it says C++ objects is it MFC C++ object or any other object?
This space is empty.
|
|
|
|
|
The comment means MFC objects. If you make up your own objects, you are responsible for making them thread-safe.
What creates the problem with MFC objects is that each thread has its own HWND<->CWnd association map. (This is used, for example, by CWnd::FromHandlePermanent() .) So once you pass a CWnd* to another thread, the thread doesn't have that object in its map, so it can't get to the HWND and back.
--Mike--
Personal stuff:: Ericahist | Homepage
Shareware stuff:: 1ClickPicGrabber | RightClick-Encrypt
CP stuff:: CP SearchBar v2.0.2 | C++ Forum FAQ
----
You cannot truly appreciate Dilbert unless you've read it in the original Klingon.
|
|
|
|
|
Thank you!
This space is empty.
|
|
|
|
|
I'm not asking you to do my work for me on this. However, how do i go about fixing it? How do i give it access to the hwnd?
I tried without luck this;
BOOL CCash3mfcDlg::OnInitDialog()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
CMyDialog dlg(AfxGetMainWnd());
dlg.DoModal();
......
}
sorry trying to fix it just don't know how.
a small example would be great.
on that has a thread going on start and updates an edit box while it runs.
Win32newb
"Making windows programs run worse than they already do"
|
|
|
|
|
void CCash3mfcDlg::Ongobutton()
{
THREADSTRUCT *_param = new THREADSTRUCT;
_param->_this = this;
AfxBeginThread (StartThread, _param);
UpdateData(TRUE);
}
put it this way _param->_this = GetSafeHwnd();
and in the Run() proc
CYourDialog *pYourDlg;
*pYourDlg = (CYourDialog*)CWnd::FromHandle("the hwnd that was saved in the _param");
This space is empty.
|
|
|
|
|
I put this in and of course it doesn't work what am I doing wrong now.
errors i get:
C:\Downloads\cash3 mfc\cash3 mfcDlg.cpp(254) : error C2440: '=' : cannot convert from 'struct HWND__ *' to 'class CCash3mfcDlg *'
C:\Downloads\cash3 mfc\cash3 mfcDlg.cpp(268) : error C2065: '_param' : undeclared identifier
Error executing cl.exe.
cash3 mfc.exe - 2 error(s), 0 warning(s)
Thanks for your patience,
tony
void CCash3mfcDlg::Ongobutton() <br />
{<br />
<br />
THREADSTRUCT *_param = new THREADSTRUCT;<br />
_param->_this = GetSafeHwnd();<br />
<br />
<br />
AfxBeginThread (StartThread, _param);<br />
UpdateData(TRUE);<br />
<br />
<br />
<br />
<br />
}<br />
<br />
int CCash3mfcDlg::run()<br />
{<br />
CCash3mfcDlg *pdlg;<br />
pdlg = (CCash3mfcDlg*)CWnd::FromHandle(_param); <br />
<br />
<br />
m_processstatus.SetPos(0);<br />
<br />
<br />
AfxEndThread(0);<br />
CWnd::MessageBox("THREAD IS DONE");<br />
pdlg.UpdateData(FALSE);<br />
<br />
<br />
<br />
return 0;<br />
}<br />
Win32newb
"Making windows programs worse than they already are"
|
|
|
|
|
win32newb wrote:
_param->_this = GetSafeHwnd();
_this is defined as CCash3mfcDlg* make it HWND
pdlg = (CCash3mfcDlg*)CWnd::FromHandle(_param);
change it to
pdlg = (CCash3mfcDlg*)CWnd::FromHandle(_param->_this);
This space is empty.
|
|
|
|
|
THANKs for you help. that cleared that error but now i get one more
it says run() is not a member of HWND which its not. its a member of CCASH3MFCDLG
I tried changing ts->_this->run(); to the following
CCash3mfcDlg::run();
and i get an error
C:\Downloads\cash3 mfc\cash3 mfcDlg.cpp(239) : error C2352: 'CCash3mfcDlg::run' : illegal call of non-static member function
i tried this as well
typedef struct ANOTHERTHREAD //structure for passing to the controlling function
{
CCash3mfcDlg* _this;
} ANOTHERTHREAD;
and then
ANOTHERTHREAD* ts = (ANOTHERTHREAD*)param;
it compiled with no errors but as soon as i start the thread it crashes
Win32newb
if (user=="Win32newb")
{
CWnd::Messagebox
("DUH");
}
ELSE
{
CWnd::Messagebox
("HELP WIN32NEWB");
}
"Making windows programs worse than they already are"
|
|
|
|
|
In the first case dont say ts->_this->run();
in the thread we had recreated the dialog pointer
CMyDialog *pDlg;
pDlg = (CMyDialog*)CWnd::FromHandle(ts->_this);
remember ?
now do this
pDlg->Run();
This space is empty.
|
|
|
|
|
I know i'm bugging you and i'm really sorry. its still not working correctly it compiles but still crashes when i run the thread.
again sorry to be a pest,
tony
here is what i currently have;
UINT CCash3mfcDlg::StartThread(LPVOID param)
{
THREADSTRUCT *_param = new THREADSTRUCT;
CCash3mfcDlg *pdlg;
pdlg = (CCash3mfcDlg*)CWnd::FromHandle(_param->_this);
pdlg->run();
//here is the time-consuming process which interacts with your dialog
return 1;
}
void CCash3mfcDlg::Ongobutton()
{
THREADSTRUCT *_param = new THREADSTRUCT;
_param->_this =GetSafeHwnd();
AfxBeginThread (StartThread, _param);
UpdateData(TRUE);
}
int CCash3mfcDlg::run()
{
counter = 0;
bool win=false;
stop=false;
int random1,random2,random3;
m_processstatus.SetRange (1, 10000);
while (stop==false&&win==false)
{
m_win=counter;
Sleep(50);
random1 = rand()%5;
random2 = rand()%5;
random3 = rand()%5;
switch (random1)
{
case 0:
m_ball1.SetIcon(m_h0);
break;
case 1:
m_ball1.SetIcon(m_h1);
break;
case 2:
m_ball1.SetIcon(m_h2);
break;
case 3:
m_ball1.SetIcon(m_h3);
break;
case 4:
m_ball1.SetIcon(m_h4);
break;
}
switch (random2)
{
case 0:
m_ball2.SetIcon(m_h0);
break;
case 1:
m_ball2.SetIcon(m_h1);
break;
case 2:
m_ball2.SetIcon(m_h2);
break;
case 3:
m_ball2.SetIcon(m_h3);
break;
case 4:
m_ball2.SetIcon(m_h4);
break;
}
switch (random3)
{
case 0:
m_ball3.SetIcon(m_h0);
break;
case 1:
m_ball3.SetIcon(m_h1);
break;
case 2:
m_ball3.SetIcon(m_h2);
break;
case 3:
m_ball3.SetIcon(m_h3);
break;
case 4:
m_ball3.SetIcon(m_h4);
break;
}
if (m_ticket1==random1&&m_ticket2==random2&&m_ticket3==random3)
{
win=true;
}
m_processstatus.StepIt ();
counter++;
}
m_processstatus.SetPos(0);
UpdateData(FALSE);
m_win = counter;
UpdateData(TRUE);
AfxEndThread(0);
CWnd::MessageBox("THREAD IS DONE");
return 0;
}
Win32newb
if (user=="Win32newb")
{
CWnd::Messagebox
("DUH");
}
ELSE
{
CWnd::Messagebox
("HELP WIN32NEWB");
}
"Making windows programs worse than they already are"
|
|
|
|
|
Thats where i'm confused. I would assume its an mfc object. if i can't pass it then how do i make it update after the thread is finished? once run completes then it stops.
if have a button onstatbutton()
void CCash3mfcDlg::Onstatbutton()
{
UpdateData(TRUE);
}
then it will update the edit box with the correct value;
so how do i make it either call a function after the thread breaks or whatever?
I even tried putting a call to the onstatbutton() after the while in run(). that didn't work either.
I'm very new to threads and mfc so my question is probably juvenile but i haven't a clue how to fix it.
P.s. I have programming windows 95 by petzold but i find that the code doesn't work unless you use this mak file that is c not c++ is there a good book that explains the win32 api for C++ USERS? AND YES I realize that c++ is c with classes. thats not the point.
Win32newb
"Making windows programs worse than they already are"
|
|
|
|
|
Define a custom message such as:
#define UWM_THREAD_DONE WM_APP At the end of the thread function, post that message to the main window (you can pass the HWND to the thread, and then post to that handle). The handler for that message can then call UpdateData()
--Mike--
Personal stuff:: Ericahist | Homepage
Shareware stuff:: 1ClickPicGrabber | RightClick-Encrypt
CP stuff:: CP SearchBar v2.0.2 | C++ Forum FAQ
----
There is a saying in statistics that a million monkeys pounding on typewriters would eventually create a work of Shakespeare. Thanks to the Internet, we now know that this is not true.
|
|
|
|
|
I have read what your said over and over but i'm too green at this to understand how to do it.
any examples anywhere on this very subject so i can get an idea of whats going on?
Win32newb
"Making windows programs worse than they already are"
|
|
|
|
|
Hey all.
I've been trying to build a small application that does communication from my PC via the comm port (I have the protocol for my HDTV receiver and want to build a little remote control app to change the channels and such)
I don't seem to have any luck whatsoever how to go about doing this. I can make it work in VC 6 and VB using the MS COMM controls, but for some reason, when I try to bring in the MS COMM controls in VC .NET 2003, it does not create the class correctly like it does in VC 6. I tried creating the project in VC 6, making it work, and then opening it up in VC .NET 2003. It compiles fine, but then crashes immediately upon running it.
I can't find any articles on how to do this (that actually work), if someone could point me in the right direction, I would be very thankful. I've been playing with this for two days now and am getting frustrated with myself at this point! I would also like to be able to fire off another thread that sits and waits for communication to come in from the comm port as well. (So I can keep up-2-date information on my program about which channel is currently active on the receiver)
PS: I have other code that is dependant on VC 2003 that I want to tie into this project, which is why I do not want to simply build it in VB or VC 6
Any help would be appreciated.
|
|
|
|
|
I dont use VC.NET just plain V6.00 I look at these
http://www.codeproject.com/system/serial_com.asp?target=Serial%7CPort
there are a lot of examples of how to use the serial port, in the end you just use it the same as reding and writing files.
|
|
|
|