|
You previously said the you wanted the popup to display information about the image. In either case you just need to add the information to your dialog, either by adding static information in your dialog resource, or by adding it at run time. Adding information to a dialog at run time can be done in response to the WM_INITDIALOG message[^] or in response to some user action on one of the dialog controls.
|
|
|
|
|
Richard,
Thanks for the reply. You are not understanding my requirement. When I click somewhere on the client area of the application I want to display a image(2-D)(thru a Cview object possibly). Something like what you would get on displaying a image with Microsoft Paint. Instead I am reading the image and displaying it. I don't think a dialog can do that display. I know how to read the image but I don't know how to display it in a pop-up window(a window other than the main application window). I hope I am clear. Regards,
-DJ
|
|
|
|
|
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?
|
|
|
|
|
Richard,
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,
-DJ
|
|
|
|
|
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.
|
|
|
|
|
Dear Richard,
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
.....
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
but it didn't work that way. Please guide me. Thanks very much,
-DJ
|
|
|
|
|
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.
|
|
|
|
|
Dear Richard,
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)
{
CClientDC dc (this);
COLORREF clr;
CPicDialog dlg;
BYTE Red,Green,Blue;
clr=dc.GetPixel (point);
Red=GetRValue(clr);
Green=GetGValue(clr);
Blue=GetBValue(clr);
dlg.DoModal()
CScrollView::OnLButtonDown(nFlags, point);
}
Thanks again,
-DJ
|
|
|
|
|
You could add a member variable to the CPicDialog class and store it there, or add another parameter to the dialog's constructor and pass it in that way.
|
|
|
|
|
Dear Richard,
Thanks for all your help. It works fine(there are a few bugs to be cleared). Will get in touch with you if I have any trouble in future. Cheers,
-DJ
|
|
|
|
|
Richard,
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,
-DJ
|
|
|
|
|
If you're only doing something simple... CDialog is really the easy route...
|
|
|
|
|
Hi,
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.
Any help will be appreciated.
Regards,
Mbatra
|
|
|
|
|
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:
CBitmap Bitmap;
COleDataSource DataSrc;
STGMEDIUM stgm;
stgm.tymed = TYMED_GDI;
stgm.hBitmap = static_cast<HBITMAP>(Bitmap.Detach());
stgm.pUnkForRelease = NULL;
DataSrc.CacheData(CF_BITMAP, &stgm);
DataSrc.DoDragDrop(DROPEFFECT_COPY);
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);
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
void CALLBACK WaveInProc(HWAVEIN hDevice, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
}
Everything seems to be fine ... what is wrong here? Thanks for any help.
This world is going to explode due to international politics, SOON.
|
|
|
|
|
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.
Veni, vidi, vici.
|
|
|
|
|
You are incorrectly trying to cast the address of the callback function to a DWORD . But according to the documentation[^], that should be a DWORD_PTR .
|
|
|
|
|
Hello all!
I'm working on a program in which, I'm receiving the bytes of an image and after storing this creating a bitmap to display.
This is my Main code Please see this..
static char buff[MAX_SIZE];
int num;
num=recv(Socket, buff, sizeof(buff), 0);
std::ifstream is;
is.open(buff, std::ios::binary);
is.seekg(0, std::ios::end);
num = is.tellg();
is.seekg(0, std::ios::beg);
is.read(buff, num);
tagBITMAPFILEHEADER bfh = *(tagBITMAPFILEHEADER*)buff;
tagBITMAPINFOHEADER bih = *(tagBITMAPINFOHEADER*)(buff+sizeof(tagBITMAPFILEHEADER));
RGBQUAD rgb = *(RGBQUAD*)(buff+sizeof(tagBITMAPFILEHEADER)+sizeof(tagBITMAPINFOHEADER));
BITMAPINFO bi;
bi.bmiColors[0] = rgb;
bi.bmiHeader = bih;
char* pPixels = (buff+bfh.bfOffBits);
char* ppvBits;
hbitmap = CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, (void**) &ppvBits, NULL, 0);
SetDIBits(NULL, hbitmap, 0, bih.biHeight, pPixels, &bi, DIB_RGB_COLORS);
GetObject(hbitmap, sizeof(BITMAP), &cBitmap);
On checking the bytes received,,its ok to be there from both client and server side, But my code is unable to read these bytes to create a bitmap.
Thanks in advance for your help!
|
|
|
|
|
You only perform a single recv() on your socket; how do you know that you have received all the data? Also, what is the purpose of the ifstream in the above code?
|
|
|
|
|
ifstream is to read buffer to create a bitmapinfo.
and if all the data is not received then there should be something on window. either black or something else but there is no activity.
|
|
|
|
|
toms from newdelhi wrote: fstream is to read buffer to create a bitmapinfo. 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.
|
|
|
|
|
yes I got it...
ifstream is basically for a file and not for a binary data.
but how to recv all data and create a bitmap with this...
Are you having any idea?
|
|
|
|
|
toms from newdelhi wrote: 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.
|
|
|
|
|
yes exactly this is the thing.
But not getting the exact thing how to do this?
|
|
|
|
|
toms from newdelhi wrote: yes exactly this is the thing. But not getting the exact thing how to do this? Too many things here. What exactly do you not understand about transferring a stream of bytes from one PC to another through network sockets? You can find plenty of samples via a Google search.
|
|
|
|