|
Hi,
In the message map you have to have something like this:
BEGIN_MESSAGE_MAP(...)
...
ON_MESSAGE(999,OnEndlabeledList)
...
END_MESSAGE_MAP()
And in your OnButton1 function you have to
SendMessage(999);
-----
We are what we repeatedly do. Excellence, then, is not an act, but a habit.
|
|
|
|
|
Florin Ochiana wrote:
SendMessage(999)
At least try something like
#define MAGIC_MESSAGE WM_APP+99 (or some other number)
ON_MESSAGE(MAGIC_MESSAGE,OnEndlabeledList)
...
SendMessage(MAGIC_MESSAGE);
MSDN states:
Message numbers in the first range (0 through WM_USER – 1)
are defined by the system. Values in this range that are not explicitly
defined are reserved for future use by the system. WM_USER is defined to be 0x400, so that your value of 0x3E7 (deimal 999) would send some message you did never intend to send to your window.
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|
|
2 ways to do this. Easy way: you can break out the relevant code from the OnEndlabeleditList handler into its own public function, and simply call that, e.g.;
void CMyDlg::OnButton1()
{
CallSomeFunction();
}
Or you can, as you were trying to do, use SendMessage. You will need the window handler of the listbox window, or a listbox class, and call SendMessage on it and send it the appropraite message. If you look at the list box (or is it a list control??) documentation in MSDN you can find the right message. It'll look like one of these:
HWND hListWindow = ::GetDlgItem(ITEM_ID_FROM_RC_FILE);
::SendMessage(hListWindow, message_id, wparam, lparam);
theListCtrl.SendMessage(message_id, wparam, lparam);
"When a man sits with a pretty girl for an hour, it seems like a minute. But let him sit on a hot stove for a minute and it's longer than any hour. That's relativity." - Albert Einstein
|
|
|
|
|
Hello, I have a problem with my MDI. When the CWinApp constructor
is called in my program several initializes are skipped. Inside
the appcore.cpp that houses the initialization code I have placed a
break point where the initialization begins. When I step through
after the 'ASSERT(AfxGetApp() == this);' line, the code jumps to
the section called '// other initialization'. The break point for the initialization code has a question mark (?) inside of it.
So when I go to close my file and the CWinApp destructor is called,
I get an error. When I make a release of it and put it on another
computer without Visual Studio, the program doesn't start. (But it
does starts on the two computers with Visual Studio 7 and 5)
What do I do to get this to work? Please help me, I need to turn
this project in my Aug 15. Thanks.
By the way, I tried it making a new mdi and the code is not skipped
on that one, but I have followed the initialization for that.
|
|
|
|
|
pdunn wrote:
By the way, I tried it making a new mdi and the code is not skipped
on that one, but I have followed the initialization for that.
That statement makes very clear that you accidentially messed something up with your class.
We need now to find out what exactly.
What are you doing in the Apps constructor that should not better be done in InitInstance()?
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|
|
unfortunately, that's wrong. The CWinApp constructor is called before the CWinApp::InitInstance(). CMyWinApp constructor is blank like the new mdi. I put it in there before I found that out. I nor MFC ever calls CWinApp(), but it does execute. Now I need to know why is part of the code in that method is being skipped.
Thanks for the effort.
|
|
|
|
|
pdunn wrote:
The CWinApp constructor is called before the CWinApp::InitInstance().
That is the way it is meant to be.
pdunn wrote:
CMyWinApp constructor is blank like the new mdi.
Good! Only some member variable initialisations belong there.
pdunn wrote:
I nor MFC ever calls CWinApp(), but it does execute.
It is called while instantiating the one global instance of your application.
Look for the line CYourApp NEAR theApp; in your apps header.
pdunn wrote:
Now I need to know why is part of the code in that method is being skipped.
Place a breakpoint on your line CYourApp NEAR theApp; line.
Place another breakpoint on the first line of your InitInstance().
'F11' should take you right to the beginning of your (empty, as you said) app constructor.
Hitting 'F5' brings you to the breakpoint at the beginning of the InitInstance().
Where does your error come up?
BTW - You did a clean rebuild of your application?
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|
|
Thanks for the reply.
My code is not being skipped. It is the MFC, appcore.cpp. The (+) denotes where I placed a break point.
CWinApp::CWinApp(LPCTSTR lpszAppName)
{
(+) if (lpszAppName != NULL)
m_pszAppName = _tcsdup(lpszAppName);
else
m_pszAppName = NULL;
// initialize CWinThread state
AFX_MODULE_STATE* pModuleState =
_AFX_CMDTARGET_GETSTATE();
AFX_MODULE_THREAD_STATE* pThreadState =
pModuleState->m_thread;
ASSERT(AfxGetThread() == NULL);
pThreadState->m_pCurrentWinThread = this;
ASSERT(AfxGetThread() == this);
m_hThread = ::GetCurrentThread();
m_nThreadID = ::GetCurrentThreadId();
// initialize CWinApp state
ASSERT(afxCurrentWinApp == NULL);
// only one CWinApp object please
pModuleState->m_pCurrentWinApp = this;
ASSERT(AfxGetApp() == this);
// in non-running state until WinMain
(+) m_hInstance = NULL;
m_hLangResourceDLL = NULL;
m_pszHelpFilePath = NULL;
m_pszProfileName = NULL;
m_pszRegistryKey = NULL;
m_pszExeName = NULL;
m_pRecentFileList = NULL;
m_pDocManager = NULL;
m_atomApp = m_atomSystemTopic = NULL;
m_lpCmdLine = NULL;
m_pCmdInfo = NULL;
...}
The second breakpoint at 'm_hInstance = NULL;' never gets called because that is where the code skips causing 'm_pDocManager' not to get initialize. Thus when the program is closed, an error occurs because the program is trying to delete an uninitialized pointer.
The value inside of m_pDocManager is junk. Furthermore, the second breakpoint has a '?' (question mark) inside of it. I don't know what this means.
Thus the error does not come from the initInstance like I first thought but the constructor of CWinApp.
|
|
|
|
|
pdunn wrote:
My code is not being skipped. It is the MFC, appcore.cpp
[Sound like Fangorn from LOTR]
HoHum
[/Sound like Fangorn from LOTR]
I have never had to step through that file.
The only thing I can think of is that the code file you are looking at is different from the one that the debug info used for stepping is made from.
Anything I can think of is wild guessing, sorry!
Are you perchance mixing MFC versions? Compilers (like VC++6 and VC++7 or VC++2003)?
In the 'project settings/debug' the line 'Executable for debug sessions' points to the correct .EXE?
You do link a 'debug multithreaded' library?
You let the compiler generate a 'Browse info' and a 'Program Database'?
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|
|
I would like to have a sourcecode to automatically discover the computers in my LAN/Domain and execute a a program remotely to all the computers it discovers. This code should be able to list all the computers it found and if we right click on any computer name, it have an option to remotely execute the program mentioned. Can anyone help? I am not a good programmer and seeking you guys help to accomplish my task.
|
|
|
|
|
Don't they call this kind of application a worm?
Clickety[^]
Steve S
|
|
|
|
|
Steve,
They may call this a worm but my intention is to discover the PCs in the network and do a software and hardware inventory. Many software out there is being excutable using logon scripts and it is time consuming. Microsoft has a tool to check the network for any softwares installed and I do not how the mechanism works. So does the SMS Server do...Network Discovery. So, If I can have a source codes how to do this then I can write the program that will retrieve the information needed. Rgds,
|
|
|
|
|
maranv wrote:
I would like to have a sourcecode to automatically discover the computers in my LAN/Domain...
How about NetServerEnum() ?
|
|
|
|
|
Thanks to everyone who helped with my CEdit problem yesterday. To recap a CEdit which isn't in a dialog sends messages like WM_KEYDOWN to its parent. This probably happens in a dialog as well, but you don't see it as the dialog msg handler sorts things out.
In the end I had two problems. Clicking on the edit control resulted in a WM_LBUTTONDOWN going to the parent window, which closed the edit control. This turned out to be a problem with WM_MOUSEACTIVATE being sent to the parent, which caused it to active and thus get the WM_LBUTTONDOWN. So preventing WM_MOUSEACTIVATE being sent to the parent window solved my mouse click problems.
Second, my parent window has a PreTranslateMessage() function which handles WM_KEYDOWN etc. The problem here was that I wasn't testing if the msg.hwnd was the same as my parent hwnd. Adding that test resolved my kbd problems.
So I now have a stand alone edit control, which can work outside of a dialog. If anyone needs anymore info let me know. Thanks again to you all for your efforts.
Neville Franks, Author of ED for Windows. Free Trial at www.getsoft.com
|
|
|
|
|
Neville Franks wrote:
So I now have a stand alone edit control, which can work outside of a dialog. If anyone needs anymore info let me know.
Great! Congratulation to get it running in that short time.
So, where do you use that control? I can only imagin a Edit control on
A) a dialog
B) a view or
C) modeless (but that would again be a dialog)
What are the other possibilities to place it?
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|
|
jhwurmbach wrote:
So, where do you use that control? I can only imagin a Edit control on
A) a dialog
B) a view or
C) modeless (but that would again be a dialog)
What are the other possibilities to place it?
I've written a custom tree control which doesn't use the MS TreeCtrl and I needed this to allow editing of tree items. The tree is on a dockable control bar in a new app I'm working on.
When I was trying to resolve this I found a post to a mailing list where the person was trying to use a CEdit in a CView and had exactly the same problem I had.
You'll see people using CEdit on Toolbars, Status bars etc. and they don't have the problem there, as these bars don't get focus!
Neville Franks, Author of ED for Windows. Free Trial at www.getsoft.com
|
|
|
|
|
This is not a specific C++ question, so if anyone suggest a more suitable board, I'm all ears.
Does anyone know of any good sorting utility? I have huge test files (20-30MB) that needs to be sorted on a regular basis. I have used a DOS program called MSORT, but this takes ages to finish,
and has no batch processing facility.
Any suggestions welcomed.
"..Even my comments have bugs!"
Inspired by Toni78
|
|
|
|
|
But first of all, what is the topology of your file ? What have to be sorted ? Is the file binary ? Ascii ? Is it numbers to sort ? Strings ?
Is it a data base file ? DBF ? MID ?
Try to cut your file in more little parts, it is easier to manage. Then write your own program with sorting algorithms you may find on the CodeProject site (use the Search engine)...
Kochise
In Cod we trust !
|
|
|
|
|
Kochise wrote:
But first of all, what is the topology of your file ? What have to be sorted ? Is the file binary ? Ascii ? Is it numbers to sort ? Strings ?
The files are Plain text ascii files. These files contain respondent data that needs to be sorted by an identifier (serial number, but possibly alpha-numeric).
"..Even my comments have bugs!"
Inspired by Toni78
|
|
|
|
|
Are the lines fixed length? If so, I might have something at home that handles huge files by reading in the "key" elements and line numbers, sorting them, then reading and exchanging data in place in the file, which I did as a pure 16-bit DOS app many moons ago. If not, it's trickier, since you have to store start and end offsets too, so it would need some more work.
By batch, I presume you mean it cannot be driven from the command line...
Steve S
|
|
|
|
|
Hi,
The following code to create a window,hangs the application(It keeps on sending WM_PAINT message)
LPCTSTR m_lpszGammaClass = AfxRegisterWndClass( CS_VREDRAW | CS_HREDRAW,
::LoadCursor(NULL, IDC_ARROW),
(HBRUSH)::GetStockObject(NULL_BRUSH),
::LoadIcon( NULL, IDI_APPLICATION ) );
GetDlgItem(IDC_STATIC_FRAME1)->GetWindowRect(&the_rect);
ScreenToClient( &the_rect );
CCYGImages the_image;
if(!m_image)
m_image.Create( m_lpszGammaClass,
"",
WS_CHILD|WS_VISIBLE ,
CRect( the_rect.left, the_rect.top,the_rect.right ,the_rect.bottom ),
this,
IDC_STATIC_FRAME1 );
One strange things is if i make the class as a local variable it is fine.But if it is a member variable it hangs. I am using that object anywhere else.
Regards
Neha
|
|
|
|
|
From MFC's AfxRegisterWndClass you set a pointer to some internal memory buffer where the NULL-terminated name of your new WndClass is located.
You do not know where that buffer is or when it will go away. So, if you need the name later, simply store it in your own CString:
In the .h-file:
CString m_GammaWindowClass;
In the .cpp:
m_GammaWindowClass = AfxRegisterWndClass(...)
Who is 'General Failure'? And why is he reading my harddisk?!?
|
|
|
|
|
I am develop one program that load jpeg image into picture control (CStatic) and then cut portion of the image, I can cut it but I can not save it into a new file name.
Here the code I use to load the image;
if (m_image.Load(m_SavePath) == S_OK)
{
m_CPicture.SetBitmap((HBITMAP)m_image);
//m_Cpiture is the variable of picture control(source)
//m)image is a CImage class
}else{AfxMessageBox("File not found or invalid format");}
Code I use to cut it;
CDC *mycdc;
mycdc=m_DestPic.GetWindowDC();
//m_DestPic is a variable of picture control(destination image)
m_image.StretchBlt(mycdc->m_hDC,1,1,300,400,25,25,300,400,SRCCOPY);
or I can use a quite long code like this;
CpicturetestDlg *CpThis;
HDC hdcDest,hdcSrc;
CpThis = (CpicturetestDlg*)this;
hdcDest = ::GetDC( CpThis->m_CpDest->GetSafeHwnd() );
hdcSrc = ::GetDC( CpThis->m_CpSource->GetSafeHwnd() );
::SelectObject( hdcSrc, CpThis->m_BackSurface.hBmp );
::StretchBlt(hdcDest,0,0,300,400,hdcSrc,pointlx,pointly,cutwidth,cutheight,SRCCOPY);
::BitBlt(hdcDest,0,0,300,400,hdcSrc,pointlx,pointlx,SRCCOPY);
::DeleteDC( hdcSrc );
::ReleaseDC( CpThis->m_CpDest->GetSafeHwnd(), hdcDest );
In this code I know that the hdcDest store the cutting image.
I need to save this image that already cutted. How to do it?
Is it possible to dump hdcDest into CImage? if possible this can solve this problem.
Is it anyway to cut the image? Could some one please help me to solve it?
Thanks
|
|
|
|
|
Hi,
I have a class CXImage and i had derived 2 objects namely image1 and Image2 from that class.In this class OnPaint() function goes like this:
OnPiant()
{
CDC *dc=GetDc();
If(/*image 1 loaded*/)
//Display the image 2 through BilBlt();
If(/*image 2 loaded*/)
//Display the image 2 through BilBlt();
}
Now first i load the image 1 ,it displays the image properly.
Now i load image 2 ,it won't displayed in the image 2 window,Eventhough i have explicitly given Invalidate() for image 2. If i minimize and maximize i can see the image in both the windows.
How can i paint both the windows simultaneously?
Regards
Neha
|
|
|
|
|
CPaintDC dc(this);
dc.DrawWhatever();
Is what you should be using instead of GetDC() . The CPaintDC constructor prepares the window for drawing according to the docs (Begin/EndPaint basically).
Note that if you use GetDC() anywhere else you should also release the DC by calling ReleaseDC(dc) ;
--
Ich, du, sie, er, es, ihr, sie, Sie.
|
|
|
|
|