|
It compiles, but I'm not getting anywhere. I'm so lost about following the instructions, I'm going to have to show the code. Here's the whole MemMapCppClientDlg.cpp:
#include "stdafx.h"
#include "MemMapCppClient.h"
#include "MemMapCppClientDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
UINT CMemMapCppClientDlg::UWM_DATA_READY = RegisterWindowMessage(UWM_DATA_READY_MSG);
CMemMapCppClientDlg::CMemMapCppClientDlg(CWnd* pParent )
: CDialog(CMemMapCppClientDlg::IDD, pParent)
{
m_pszMemMapFileName = _T("Mem_Map_File-{70122C30-0239-4f98-9D21-36885C8A8121}");
}
CString CMemMapCppClientDlg::m_strContent = "";
BEGIN_MESSAGE_MAP(CMemMapCppClientDlg, CDialog)
ON_REGISTERED_MESSAGE(UWM_DATA_READY, OnDataReady)
END_MESSAGE_MAP()
BOOL CMemMapCppClientDlg::OnInitDialog()
{
CDialog::OnInitDialog();
return TRUE;
}
LRESULT CMemMapCppClientDlg::OnDataReady(WPARAM, LPARAM)
{
HANDLE hMapFile = NULL;
PVOID pView = NULL;
hMapFile = OpenFileMapping(FILE_MAP_READ, FALSE, m_pszMemMapFileName);
if(hMapFile == NULL) {
MessageBox("Can not open file mapping");
return 0;
}
pView = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
if(pView == NULL) {
MessageBox("Can map view of file");
CloseHandle(hMapFile);
return 0;
}
LPSTR szContent = reinterpret_cast<LPSTR>(pView);
int nLen = strlen(szContent);
CString m_strContent;
while(nLen > 0) {
m_strContent += *szContent++;
--nLen;
}
m_strContent += '\0';
m_strContent.Replace("\n", "\r\n");
MessageBox(m_strContent);
if(pView) UnmapViewOfFile(pView);
if(hMapFile) CloseHandle(hMapFile);
return 0;
}
CString CMemMapCppClientDlg::GetContent()
{
return m_strContent;
}
Here's the MemMapCppClientDlg.h:
#if !defined(AFX_MEMMAPCPPCLIENTDLG_H__A51F6AF7_F28D_461D_8FB3_EFC7B929D99C__INCLUDED_)
#define AFX_MEMMAPCPPCLIENTDLG_H__A51F6AF7_F28D_461D_8FB3_EFC7B929D99C__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CMemMapCppClientDlg : public CDialog
{
public:
static UINT UWM_DATA_READY;
CMemMapCppClientDlg(CWnd* pParent = NULL);
static CString GetContent();
enum { IDD = IDD_MEMMAPCPPCLIENT_DIALOG };
protected:
protected:
virtual BOOL OnInitDialog();
afx_msg LRESULT OnDataReady(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
static CString m_strContent;
private:
LPCTSTR m_pszMemMapFileName;
};
#define UWM_DATA_READY_MSG _T("UWM_DATA_READY_MSG-{7FDB2CB4-5510-4d30-99A9-CD7752E0D680}")
#endif // !defined(AFX_MEMMAPCPPCLIENTDLG_H__A51F6AF7_F28D_461D_8FB3_EFC7B929D99C__INCLUDED_)
It compiles, but I followed the directions wrong. Nothing's showing up in the message box.
|
|
|
|
|
Knowing that a static asssignment can make this work is a lot further along than where I was yesterday (which is a lot farther than where I was the days and and weeks before that.)
I'm sorry I couldn't follow the instructions. My fault. I don't know if my changes to the code are right or wrong. But thanks for the guidance.
|
|
|
|
|
e40s wrote: Nothing's showing up in the message box.
It's probably because you are not modifying CMemMapCppClientDlg::m_strContent , but are modifying m_strContent that is local to OnDataReady() instead. Do you concur?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I don't understand. Are you saying you observe that's what I'm currently doing, and I shouldn't?
Or are you saying that's what I'm not currently doing?
Isn't m_strContect local to OnDataReady?
Where have I written something where I shouldn't? Where should I write something?
|
|
|
|
|
e40s wrote: Isn't m_strContect local to OnDataReady?
Yes, it has such a local variable that gets destroyed when OnDataReady() goes out of scope. Remove that one and you should be good to go.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
David, I really want to thank you for your considerable help and patience and time expended in teaching me how to do this. I'm away from my machine at the moment, but I'd like to test this out as soon as I can reestablish my work in a few days. I'm looking forward to seeing it work.
Thanks again.
|
|
|
|
|
e40s wrote: VARIANT _stdcall SumOneToArray(VARIANT sourceArray)
{
CMemMapCppClientDlg dlg;
CString strContent = dlg.GetContent();
MessageBox(NULL, _T(strContent), _T("Like this:"), MB_OK);
You declare a NEW instance of the CMemMapCppClientDlg! Another instance may have ran, but this one definitely has not! So, m_strContent is still empty!
As a consequence MessageBox(...) will display the empty string. Nothing Strange about that.( why not use AfxMessageBox(...)? )
If you want to share m_strContent between different instances, make it static! Be aware of other side effects though if you do this.
BTW Do not use the _T() Macro on a variable, only on quoted text.
Hope this helps you along
Bram van Kampen
|
|
|
|
|
Bram, thank you for this; the more posters who confirm this direction means I can be that much more comfortable this is the standard and state of the art.
|
|
|
|
|
Hi there,
I'm using an MFC graph control to display multiple lines from a stored results file. Each line has a corresponding Y axis & colour.
Is it possible to drag a vertical line across the chart (using OnLButtonDown?) which would then dynamically display the intersecting values in a grid control, along with the corresponding Y axis name & line colour?
Cheers.
PS. This is my 1st post to Code Project so I apologise if it's a bit vague.
ADVAthanksNCE
|
|
|
|
|
ADVAthanksNCE is so great
Hope someone will know how to help you
Cheers
|
|
|
|
|
Can you give me details about the MFC graph control that you are using? It is possible to get that as long as you have complete access to the graph control.
|
|
|
|
|
Hi, The graph control is an ocx (COleControlModule) and I do have full access to it.
At the moment, I use a CDialog to drop the basic line chart into.
To be specific, what I want to do is:
Enhance my basic line graph to:
1. Add a mouse-moveable vertical line originating from the x-axis.
2. Display the values at the points where the lines on the graph intersect the vertical line.
3. Use a grid to display each value with it's associated line colour/type & name.
4. Add/remove lines (& relevant y-axes) to the graph & grid.
Thanks.
|
|
|
|
|
If you want to drag a line of your graph control, you will need to be more specifical and post some code to let the others know about the situation.
If you just want to have a vertical line moving... you can make it easily with the DC, MoveTo and LineTo...
Explain a bit more about what you really need and... if you are new in forum... I recommend you to read this[^]
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
|
|
|
|
|
Hi, Apologies, I'll be more specific. What I want to do is:
Enhance my basic line graph to:
1. Add a mouse-moveable vertical line originating from the x-axis.
2. Display the values at the points where the lines on the graph intersect the vertical line.
3. Use a grid to display each value with it's associated line colour/type & name.
4. Add/remove lines (& relevant y-axes) to the graph & grid.
The graph control is an ocx (COleControlModule) and I have full access to it.
At the moment, I use a CDialog to drop the basic line chart into.
Thanks.
|
|
|
|
|
Hi All,
I am hoping someone can lend assistance for the following. I did not receive any responses in the 'General Discussion' area. I recently submitted an article wich grafts compiled executable code on Windows. See Grafting Compiled Code[^]
What I would like to demonstrate next is the grafting of Linux code into a Windows executable. For a donor, I was thinking it would be appropriate to stay with the Checksum algorithm. So the ELF checksum seems like a good candidate.
For this, I have questions:
1) Does ELF use a checksum (or hash)
2) What Linux function is called to perform this?
3) In which lib is the function located?
Thanks,
Jeff
|
|
|
|
|
Hello Jeff,
Executable and Linking Format uses a hash.
unsigned long ElfHash(unsigned char* c)
{
unsigned long hash = 0;
unsigned long x = 0;
while (*c)
{
hash = (hash << 4 ) + *c++;
if(x = hash & 0xF0000000)
{
hash ^= x >> 24;
}
hash &= ~x;
}
return hash;
}
This project is great for researching ELF format:
http://sourceforge.net/projects/elfio/[^]
|
|
|
|
|
Hi Randor,
Very nice. They do not offer a compiled program (only sources). Would you be able to email me the compiled program (with symbols)? noloader, gmail account.
I apologize for the request. I recycled my Linux box, and don't want to work with a CygWin emulator.
Jeff
|
|
|
|
|
I learned graphics programming using win32 api and its possible my programming style is stuck in a different era, so could anyone tell me:
To the best of my knowledge there is no BitBlt with raster operation (ROP) codes in GDI+. IOW, only using GDI+, you cannot combine a source and destination bitmap using a basic bitwise logical operator (for example AND) on the binary bits of the two bitmaps. If this is the case, is it because bitwise logical ops aren't really necessary? I know GDI+ has alpha and other things that GDI does not. Are ROP codes just irrelevant in graphics programming today? I find that hard to believe - Consider that with a windows icon, it will store a black and white mask to be used in masking the background. How is that mask accomplished behind the scenes except via BitBlt with ROP codes?
My real reason for asking this is that I have recently been familiarizing myself with the flash/actionscript/flex environment for web development and you can do all sorts of complex graphical operations/masks with it. However in Actionscript as well, there is alpha blending and other things, but apparently no bitwise logical operations possible between bitmaps.
Thanks for anyone who can clear this up for me.
|
|
|
|
|
You can create a memDC, create a graphics object using the memDC, draw to the graphics object, let the graphics object fall out of scope, then bitblt the memDC all you want.
There are many things to do in the middle of all that but it is possible indirectly if thats what you need.
However, setting the ROP for line drawing in the DC, then creating the graphics object from the DC will not work for things like "Rubberbanding". To the best of my knowledge, you need to draw to the DC directly for things that use SetROP2()
|
|
|
|
|
GDI+ extends GDI, it doesn't replace it. You're free to use GDI if you need
the ROPs.
Force Code wrote: Consider that with a windows icon, it will store a black and white mask to be used in masking the background. How is that mask accomplished behind the scenes except via BitBlt with ROP codes?
Do you mean with GDI+? I believe when you load an icon into a GDI+ Image/Bitmap
it is converted to 32-bit ARGB so it uses alpha blending instead of the mask
(based on experience, not documentation...try it ).
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark Salsbery wrote: Force Code wrote:
Consider that with a windows icon, it will store a black and white mask to be used in masking the background. How is that mask accomplished behind the scenes except via BitBlt with ROP codes?
Do you mean with GDI+? I believe when you load an icon into a GDI+ Image/Bitmap
it is converted to 32-bit ARGB so it uses alpha blending instead of the mask
(based on experience, not documentation...try it ).
Mark
So everything that can be accomplished with ROP codes can be done w/ alpha blending? I know what alpha blending is, and used it in an application I'm developing, but the concept of it as a complete replacement for bitwise logical ops on bitmaps is new to me. Would someone attempt to do away with C's bitwise operators - and then replace it with what? I don't get it. How would you replace the ROP code 0x00AC0744 (which I actually use somewhere). How do you replace SRCAND or SRCPAINT, for that matter. I guess I need to find out however, because none of the modern programming environments seem to have anything but alpha. Don't suppose you know of a primer that would get me up to speed. (Well, it looks like you implied above that rop codes are still needed - still slightly confused - why wouldn't actionscript have either bitwise AND or OR for bitmaps given all the myriad stuff it can do.)
|
|
|
|
|
Force Code wrote: but the concept of it as a complete replacement for bitwise logical ops on bitmaps is new to me.
Isn't it only partial. I'm not versed in graphics by any measure but doesn't GDI+ cover everything by providing DrawImage (which you can use multiple times) with Effects objects and ImageAttributes?
|
|
|
|
|
Thanks i'll look into this
|
|
|
|
|
Force Code wrote: So everything that can be accomplished with ROP codes can be done w/ alpha blending?
I never stated that anywhere. I attempted to answer a specific question -
the one I quoted from your post. If you weren't referring to GDI+ (which I
asked), then you can disregard the comment.
Again, if you want to use the ROP codes, use GDI. There's nothing wrong
with that....it's still fully supported.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark Salsbery wrote: Force Code wrote:
Consider that with a windows icon, it will store a black and white mask to be used in masking the background. How is that mask accomplished behind the scenes except via BitBlt with ROP codes?
Do you mean with GDI+? I believe when you load an icon into a GDI+ Image/Bitmap
it is converted to 32-bit ARGB so it uses alpha blending instead of the mask
(based on experience, not documentation...try it ).
Mark
Not sure what the mere fact its converted to ARGB indicates. It seems a bitblt could still be performed on the lower 24 bits. How would you make a bitmap background transparent only using the source, destination, and alpha blending (with no mask bitmap).
OK I'll answer my own question, by using the alpha channel as the mask bitmap.
|
|
|
|