|
Normally, when you use MFC and you create a dialog class, this class has a member called IDD. This is the dialog resource (how the windows looks and what controls are on it).
Since I don't know your classes, I don't know why you don't have them, but you can remove the line: : CDialog(...) .
viveking wrote:
D:\CLTRK\CLTRK02\TrayDialog.cpp(487) : error C2664: '__thiscall CTrayDialog::CTrayDialog(unsigned int,class CWnd *)' : cannot convert parameter 1 from 'class CTrayDialog *const ' to 'unsigned int'
I must have switched the parameters. So the dialog resource comes second instead of first. If you are wondering what the other parameter is, it's the parent window of the dialog.
Behind every great black man...
... is the police. - Conspiracy brother
Blog[^]
|
|
|
|
|
forget everything.... i'll come with a simpler example.. please wait.
vivek
|
|
|
|
|
Though it looks primitive.. please dont ignore..
see the class test with its data member "text" and function "disp()"
i wanna access it from the Thread1 and Thread2..
#include <afxwin.h>
#include<afxext.h>
#include<stdio.h>
char fValue[10];
CWinThread *pThread1,*pThread2;
UINT Thread1(LPVOID lp)
{
CClientDC cdc(AfxGetApp()->m_pMainWnd);
int j=250;
for(int i=1;i<=600;i++)
{
cdc.TextOut(i,j,"Thread1");
cdc.SetBkColor(0x0009999);
Sleep(6);
strcpy(fValue,"Thread1");
Text = fValue; ///// I WANT TO ACCESS THE DATA MEMBER "TEXT" FROM CLASS TEST//
cdc.TextOut(500,500,Text);
}
disp();/// HOW TO ACCESS MEMBER FUNCTION "DISP" FROM CLASS TEST//
return 0;
}
UINT Thread2(LPVOID lp)
{
CClientDC cdc(AfxGetApp()->m_pMainWnd);
cdc.SetBkColor(0x0990009);
int j=280;
for(int i=1;i<=600;i++)
{
cdc.TextOut(i,j,"Thread1");
Sleep(5);
strcpy(fValue,"Thread2");
Text = fValue;///// I WANT TO ACCESS THE DATA MEMBER "TEXT" FROM CLASS "TEST"//
cdc.TextOut(500,500,Text);
}
disp();/// HOW TO ACCESS MEMBER FUNCTION "DISP" FROM CLASS TEST//
return 0;
}
class test
{
public:
CString Text;
void disp()
{
AfxMessageBox(Text);
}
};
CMenu cm;
class MyWindow: public CFrameWnd , public test
{
public:
MyWindow()
{
Create(0,"Threads of MFC");
}
void q()
{
PostQuitMessage(0);
}
void Threads()
{
AfxMessageBox("Starting....");
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(MyWindow,CFrameWnd)
END_MESSAGE_MAP()
class MyWin:public CWinApp
{
public :
BOOL InitInstance()
{
MyWindow *x;
x=new MyWindow;
m_pMainWnd=x;
pThread1=AfxBeginThread(Thread1,x);
pThread2=AfxBeginThread(Thread2,x);
x->ShowWindow(SW_SHOWMAXIMIZED);
return 1;
}
};
MyWin App;
thanks bob,
vivek
|
|
|
|
|
viveking wrote:
disp();/// HOW TO ACCESS MEMBER FUNCTION "DISP" FROM CLASS TEST//
Try:
UINT Thread2(LPVOID lp)
{
MyWindow *mw = (MyWindow *) lp;
mw->disp();
return 0;
}
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
Hello,
Sorry for this late reply..
A couple of things:
<list> You pass a pointer x, that points to a MyWindow object to the thread as parameter, but you don't use it in either of your threads..
You call AfxGetApp() to get the value of m_pMainWnd
Your main app window is x
MyWindow derives from Test
Thinking about all these things don't ring a bell? Anyway, what you want to achieve can be done in at least the following 2 ways:
static_cast<MyWindow*>(AfxGetApp()->m_pMainWnd)->Text;
static_cast<MyWindow*>(lp)->Text;
Hope this helps
Behind every great black man...
... is the police. - Conspiracy brother
Blog[^]
|
|
|
|
|
Can you post the header file of your class ? Please use formating tags (the code tag just above the emoticons).
|
|
|
|
|
|
cedric, my program is too complex.. even i'm worn out looking at the code..
can u post a simple program which wil explain it clearly?
should i declare the thread inside the class? just like we do for member functions?
i.e
class test
{
public
UINT Thread(LPVOID lp);
}
??
do we have any alternative for CWinThread?
vivek
|
|
|
|
|
|
bob,david,cedric,michael, and paul........
paul the link u gave is ultimate.. thank u so much. really resourceful.i think i wont be disturbing u guys again.. everything's there
The Thread Solution
It is almost always the case that you can use threads to do the job more easily. This is not without certain costs and hazards, but it ultimately is the better method.
Here's a solution to handling the invert-everything. Note that we have to move from the pure-C domain (which we interface to via a static method) to the MFC domain.
To the class (in this example, a CView-derived class), add the following declarations:
static UINT run(LPVOID p);
void run();
volatile BOOL running;
To start a thread, your handler does
void CMyView::doInvert()
{
running = TRUE;
AfxBeginThread(run, this);
}
UINT CMyView::run(LPVOID p)
{
CMyView * me = (CMyView *)p;
me->run();
return 0;
}
void CMyView::run()
{
for(int x=y = 0; running && y < image.height; y++)
for(int x = 0; running && x < image.width; x++)
changePixel(x, y);
running = FALSE;
}
The command to stop the thread is very simple:
void CMyView::OnStop()
{
running = FALSE;
}
That's all there is to it!
vivek
|
|
|
|
|
|
|
My situation is where I have a java application which is using the heap memory (we tuned by Xms and Xmx settings). Even the memory is cleared by System.gc()the memory is not freed and is not retured back to OS. We are able to see the heap increasing as we run our application.
To free that memory what sort of approch i can do using C++ /VC++/VB. Can any one helpe in writting a program to do the same
|
|
|
|
|
Jreko2003 wrote:
We are able to see the heap increasing as we run our application.
What are you using to verify this? If it's Task Manager, see here.
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
Jreko2003 wrote:
My situation is where I have a java application which is using the heap memory (we tuned by Xms and Xmx settings). Even the memory is cleared by System.gc()the memory is not freed and is not retured back to OS.
Memory is never returned back to OS. You can only re-use freed memory within the program.
|
|
|
|
|
we know we can access a file(dload, create, delete...) on a ftpsite
by some software, but i try to write a program with error for filename:...
The Codes i wrote can not found file "My Projectinfo.inf", Why?
Are there some way to access file has filname have space?
My_Fun()
{
...
pFtpConn = mysession.GetFtpConnection( my_ftpserver, my_user, my_pass );
CFtpFileFind finder(pFtpConn);
BOOL bWorking = finder.FindFile("/My Projectinfo.inf" );
...
}
Thanks!!!
|
|
|
|
|
lewislewis_lewis wrote:
BOOL bWorking = finder.FindFile("/My Projectinfo.inf" );
If FindFile() returns FALSE , what does GetLastError() return?
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
if( !bWorking )
{
DWORD errcode = GetLastError();
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
errcode, //GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
LocalFree( lpMsgBuf );
}
the MessageBox dispaly :"There are no more files"
What is wrong?
|
|
|
|
|
Does your code work for files with no spaces in the name?
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
YES, I tested it maney times.
|
|
|
|
|
Did you remember to call FindNextFile() before using any of the other CFtpFileFind methods? What does the following produce:
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
TRACE("]%s[\n", (LPCTSTR) finder.GetFileURL());
} Does it show the name of the file with spaces in its name?
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
If I get FileURL, Every thing is OK, But I can not manipulate the file
with space filename.
|
|
|
|
|
Define "manipulate." Has the original problem been fixed, and now you have encountered another?
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
My_Fun()
{
...
pFtpConn = mysession.GetFtpConnection( my_ftpserver, my_user, my_pass );
CFtpFileFind finder(pFtpConn);
BOOL bWorking = finder.FindFile("/*.*" );
while( bWorking )
{
bWorking = finder.FindNextFile();
sURL = finder.GetFileURL();
pFtpConn->GetFile( sURL, "C:\Dloadfile.inf" );
}
...
}
Nothing donwload!!!
|
|
|
|
|
lewislewis_lewis wrote:
pFtpConn->GetFile( sURL, "C:\Dloadfile.inf" );
You need to use two backslashes.
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|