You can display an image in any sort of window, it is just a matter of writing the code to do the work. Whether that window is a CView, a dialog, or any other type is not important. What I am confused about is the fact that you seem to be talking about more than one image and more than one window; but which one comes first and what does it contain?
Thanks for your reply. In very simple terms I have a SDI application which displays an image. Now when the user clicks on a point on this image I want to display a pop up window with another image(This image is the grating[2-d array] corresponding to the color of the point clicked). I have made the SDI application which displays the 1st image.But I don't know how to make a popup window with the grating image. I have searched a lot on the web with no luck. It's frustrating. Please comment asap. Regards,
I'm not sure what a grating image is, but assuming you can create it using Windows GDI or GDI+, then any Window type should be OK to display it. The simplest option would obviously be a Dialog with a Static Control[^] on which you would display this image.
I am attempting what you have suggested. But I am curious how to open a pop-up window from the SDI application(CWinapp1+CDocument1+CFrameWnd1+CScrollView1) which shows the first image. The pop-up window (CWinapp2+CDocument2+CFrameWnd2+CScrollView2) which corresponds to grating/second image has to be displayed from CSrollview1::OnLButtonDown. If I can do that, it would save me a lot of effort. But I don't know how to do it. In CSrollview1 I tried
AddDocTemplate(pDocTemplate2);//corresponding to 2nd document
but it didn't work that way. Please guide me. Thanks very much,
Adding another document template is not what is needed in your case. As I have suggested a number of times, using a simple modal dialog would be the simplest way to create what you need. Alternatively, you can create a stand-alone window with the appropriate styles[^] and display it until the user requests it to be discarded.
What you have suggested(dialog with bitmap static control) has mostly worked. I agree it would be the shortest route. I have a small issue. When I click on the 1st image I get the pixel/color value of that point. Now I have to pass that to the dialog box which is popped up. Any clue how I would do that.
void CCreateGratingsView::OnLButtonDown(UINT nFlags, CPoint point)
// TODO: Add your message handler code here and/or call default
CClientDC dc (this);
//dlg should receive Red Green Blue
To add to what I have stated previously, From the Cview object(OnLButtonDown f.n) of the SDI application I want to create a pop-up window ,read the second or grating image and display it in the pop-up window. Thanks,
I have a dialog box and a picture control (canvas) on that dialog box. I have a list of Images in my dialog box in a list box. I want to implement Drag & Drop feature in my application. I want the user be able to click on the Image with a mouse and then drag the Image to the canvas.
Handle the drag event in your dialog or the list. If your list is CListCtrl based use a LVN_BEGINDRAG handler. Otherwise use a WM_LBUTTONDOWN handler. From within that handler create a copy of the bitmap, cache it using the COleDataSource class and start the drag and drop operation:
// Get selected image into Bitmap here
stgm.tymed = TYMED_GDI;
stgm.hBitmap = static_cast<HBITMAP>(Bitmap.Detach());
stgm.pUnkForRelease = NULL;
// When moving is allowed pass DROPEFFECT_COPY | DROPEFFECT_MOVE
// here and delete the image when DoDragDrop returns DROPEFFECT_MOVE.
// Don't call default handler here when DoDragDrop has been called.
// Because OLE has handled all further mouse actions.
On the target side, use the COleDropTarget class. If the target is a CView derived class, it is simple to implement by adding a COleDropTarget member to the view, adding the virtual OnDrop... handlers and registering the view as drop target from OnInitialUpdate(). With other window types than CView based ones, you must derive your own window specific COleDropTarget class that knows your window class so that it can access the required functions and members.
From within the COleDropTarget::OnDrop[Ex] function, use the provided COleDataObject to get the data by calling GetData(CF_BITMAP, &stgm).
When using the MFC COle... classes, you must include afxole.h (e.g. in stdafx.h) and call AfxOleInit() from within InitInstance() of your Windows app class.
Hello guys. I am trying to write a small recording program but am stuck in basics. I can not pass the pointer of the WaveInProc function properly. I am trying it in two ways, both of them widely used on online examples.
1 - rResult = ::waveInOpen(&phWaveIn, WAVE_MAPPER, &pcmWaveFormat, (DWORD)WaveInProc, 0, CALLBACK_FUNCTION);
2 - rResult = ::waveInOpen(&phWaveIn, WAVE_MAPPER, &pcmWaveFormat, (DWORD)&WaveInProc, 0, CALLBACK_FUNCTION);
// then tried this one as well, generating error c2440
3 - rResult = ::waveInOpen(&phWaveIn, WAVE_MAPPER, &pcmWaveFormat, (DWORD)(VOID*)WaveInProc, 0, CALLBACK_FUNCTION);
Their corresponding error messages are shown as under
1 - error C2440: 'type cast' : cannot convert from'void (__stdcall CWaveApiDlg::* )(HWAVEIN,UINT,DWORD,DWORD,DWORD)' to 'DWORD'2 - error C2276: '&' : illegal operation on bound member function expression
This is what WaveInProc looks like in my .cpp file
Well, you are passing a pointer to a (non static) method of class CWaveApiDlg where a function pointer is requested. You cannot do that. Either pass a (pointer to a) global function or to a static method of the class.
Read what buffer? Where is the actual bitmap data that you are reading? Assuming the client is sending this as a binary stream from the original bitmap buffer there should be no work to do at the server end other than ensuring you capture the entire buffer.
ifstream is basically for a file and not for a binary data.
What does this have to do with your problem?
As I understand it you are trying to transfer a bitmap from one computer to another via a network socket. So it is just a matter of transferring the binary data without any changes to its structure, and displaying the bitmap on the target system.
either you need to have a protocol implementation in your Clien-Server communication or you have to make sure that you send all the buffer at one time. If you are choosing a protocol means you first send a message to the server that am going to send a image buffer with size/length X and at the server store this and use this value for the next receive command.
If you are going to use whole buffer at one time, just use that buffer as such to create re-create your image. having a protocol is the best choice. if you google you can find many protocols choose the simplest one that suits your requirement.
Hello everybody i have a small question , not big enough for the quick answers . I am working on a MFC project a little bit old. And i had to add a header to the print result. My problem was with the font Size. After some tries i found the really useful Article about Printing trics. The problem was when i used
Printing was ok but the PrintPreview wasnt. The font size was still small and i know why the GetDeviceCaps was returning the dpi of the monitor. This was understandable . After some digging in the code i found that for the rest printed text the font size was calculated a little bit different. For the font Height was taken the absolute value of the height multiplied by the zoom and all divided by some constant. My question is is there some practice about that kind of calculation . To be honest i don't think its a good idea to use it. I don't believe that all printers will print the same thing. But the PrintPreview and the Print result are pretty much the same.
What do you think ?
I created a MFC Smart Device App with Visual C++ in Visual Std 2008. I have dialog forms, I created SQLite database in VS2008. And I imported sqlite.dll sqlite.def etc. files. Now, I want to select data from my database, show in my textlist for example. But I don't know How can I do this.
What is my sqlconnection sentence? How can I create test.db? Which class will I write my sqlconnection sentence, or my select, insert, delete, update sql code? Can anybody explain this step by step?
It is my Job. I research this topic since a week, but still I can not solve this problem. Please help me!
We have developed a COM DLL 64 bit on Windows Server 2008 R2 - 64 bit and this dll is successfully register when visual studio 2010 is installed on the machine but when on a fresh machine its unable to register with following error:
module xxxx.dll failed toload
make sure the binaryis stored at the specified path or debug it tocheckfor prob with the binaryor dependent dll files
After a lot of investigation, we found that if Microsoft C++ runtime 2010 10.0.3019 is installed, then only dll will be registered. Can anyone provide the required list of dependecy. Thanks in advance.
I'm working on a project and I'm a beginner in VC++.
I'm creating a TCP server that will receive a bitmap and will show it on window.
The motive is to receive the continuous images from a client and show them one by one on server window.
Well, you are starting off from the wrong basis here.
A TCP server (in fact a client and server) is implemented in the kernel (on WIndows as TCPIP.sys) and supports am interface called TDI (on older Windows OSs and called something else on newer ones). TDI transports across the IO manager (Kernel to USer mode), providing sockets in the user mode for applications to use.
So what you need are two apps one that opens a socket and sends a bmp file, and another that waits on a socket and can render that bmp file to the screen.
(You can also not directly display UI stuff from the kernel so the stock TCP kernel driver would never be able to display a bmp)
If you really wanted to implement a user mode TCP server/client module then the question is why, and the problem is how you are going to send IP packets to the network card. And if you wanted to send Ethernet packets to the network card you would need to implement IP in user mode too. And if you wanted to do that you would need to write a network driver for your card with a interface accessible to the IO manager that you could open in user mode to get those Ethernet packets to it. All in all a massive and complex problem, so just use sockets, its what they are made for, and made by a lot of very clever people who understood the network stack and provided it for people like you to use.