|
This is just a copy->paste from MSDN:
You can use a bitmap to capture an image, and you can store the captured image in memory, display it at a different location in your application's window, or display it in another window.
In some cases, you may want your application to capture images and store them only temporarily. For example, when you scale or zoom a picture created in a drawing application, the application must temporarily save the normal view of the image and display the zoomed view. Later, when the user selects the normal view, the application must replace the zoomed image with a copy of the normal view that it temporarily saved.
To store an image temporarily, your application must call CreateCompatibleDC to create a DC that is compatible with the current window DC. After you create a compatible DC, you create a bitmap with the appropriate dimensions by calling the CreateCompatibleBitmap function and then select it into this device context by calling the SelectObject function.
After the compatible device context is created and the appropriate bitmap has been selected into it, you can capture the image. The BitBlt function captures images. This function performs a bit block transfer — that is, it copies data from a source bitmap into a destination bitmap. However, the two arguments to this function are not bitmap handles. Instead, BitBlt receives handles that identify two device contexts and copies the bitmap data from a bitmap selected into the source DC into a bitmap selected into the target DC. In this case, the target DC is the compatible DC, so when BitBlt completes the transfer, the image has been stored in memory. To redisplay the image, call BitBlt a second time, specifying the compatible DC as the source DC and a window (or printer) DC as the target DC.
The following example code, from an application that captures an image of the entire desktop, creates a compatible device context and a bitmap with the appropriate dimensions, selects the bitmap into the compatible DC, and then copies the image using the BitBlt function.
hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
hdcCompatible = CreateCompatibleDC(hdcScreen);
hbmScreen = CreateCompatibleBitmap(hdcScreen,
GetDeviceCaps(hdcScreen, HORZRES),
GetDeviceCaps(hdcScreen, VERTRES));
if (hbmScreen == 0)
errhandler("hbmScreen", hwnd);
if (!SelectObject(hdcCompatible, hbmScreen))
errhandler("Compatible Bitmap Selection", hwnd);
ShowWindow(hwnd, SW_HIDE);
if (!BitBlt(hdcCompatible,
0,0,
bmp.bmWidth, bmp.bmHeight,
hdcScreen,
0,0,
SRCCOPY))
errhandler("Screen to Compat Blt Failed", hwnd);
ShowWindow(hwnd, SW_SHOW);
Hope it helps...
- Anders
|
|
|
|
|
Hi,
I would like to give my window it's own unique class name. However, because I'm using MFC I have to use AfxRegisterWndClass() which makes up a name for itself. I want to be able to give it a more 'user-friendly' name.
Does anyone know how to get around this?
Cheers
James
|
|
|
|
|
You can use AfxRegisterClass() instead. You provide a WNDCLASS struct to this function, so you can name your class anything you like.
--Mike--
http://home.inreach.com/mdunn/
Is history an illusion caused by the passage of time, or is time an illusion caused by the passage of history?
|
|
|
|
|
my view is derived from CEditView and need to get the CEdit pointer back so I can use the function LineScroll(..) from within the view class itself! am I stock or someone knows it! please.
|
|
|
|
|
Inside the class, you would do something like:
GetEditCtrl( ).LineScroll()
Hope this helps.
|
|
|
|
|
Perfect! Thankx!
One problem though, the LineScroll(....) does not scroll!
One thing am stock with is this scenario:
I have a dialog that is modal, I enter text into an Editbox on it and then add this dialogs text into the edit box of the view! But once I add another text, it just appends to the end of the last existing text. What I need is to scroll the cursor down, something like as if I pressed the Enter key while in the view's text editor area!
this is my code fragment:
<br />
<br />
<br />
void CTestView::OnInsertText() <br />
{<br />
<br />
CNewString dlg;<br />
<br />
CEdit *pEdit = (CEdit*) &GetEditCtrl();<br />
ASSERT(pEdit);<br />
<br />
UINT result = dlg.DoModal();<br />
<br />
if(result==IDOK){<br />
<br />
m_NewString += dlg.m_String; <br />
pEdit->SetWindowText(m_NewString);<br />
<br />
pEdit->LineScroll(1);
<br />
}<br />
<br />
}<br />
<br />
|
|
|
|
|
One example to clarify is the Output window of Visual Studio, in the Build tab That's what I desire to accomplish!
|
|
|
|
|
Hi
CEdit *pEdit = (CEdit *) this;
Best Regards ! Vova
|
|
|
|
|
Thanx!
I got another question, I posted two replies to Jason's reply, please check and let me know!
|
|
|
|
|
Hello All
I've been looking for a way to use a different font for my editor in Visual C++.. All the other tools in the Visual Studio suite allows the use of MANY fonts. For some reason VC++ only allows a few.. I have to perfect setup on Visual Interdev and it drives me nuts when I switch to VC++.. Does anyone have any suggestions..
Thanks
Chris
|
|
|
|
|
Tools->Options->Format tab. Click "Source Windows" in the left-hand list and then pick a new font and size.
--Mike--
http://home.inreach.com/mdunn/
Is history an illusion caused by the passage of time, or is time an illusion caused by the passage of history?
|
|
|
|
|
I want to play a sound file when i click a butten, but i cant really find anyhelp on this one..
it sounds easy, so i think it is but i cant figure it out... Im new
ps. How do i make a butten open a app off my chose?? like i want to make a menu for my games...
Thank you...
|
|
|
|
|
I want to play a sound file when i click a butten, but i cant really find anyhelp on this one..
it sounds easy, so i think it is but i cant figure it out... Im new
ps. How do i make a butten open a app off my chose?? like i want to make a menu for my games...
Thank you...
|
|
|
|
|
Very easy - just handle the clicking of the button ( in class wizard ) and PlaySound(filepath, NULL, SND_NODEFAULT);
ShellExecute will allow you to run an app programatically - from MSDN:
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpVerb,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
Parameters
hwnd
Handle to a parent window. This window receives any message boxes that an application produces. For example, an application may report an error by producing a message box.
lpVerb
A string, referred to as a verb, that specifies the action to be performed. The set of available verbs depends on the particular file or folder. Generally, the actions available from an object's context menu are available verbs. For more information about verbs and their availability, see Object Verbs. See Extending Context Menus for further discussion of context menus. The following verbs are commonly used: Verb Description
edit Launches an editor and opens the document for editing. If lpFile is not a document file, the function will fail.
explore Explores the folder specified by lpFile.
find Initiates a search starting from the specified directory.
open Opens the file specified by the lpFile parameter. The file can be an executable file, a document file, or a folder.
print Prints the document file specified by lpFile. If lpFile is not a document file, the function will fail.
properties Displays the file or folder's properties.
If you set this paramater to NULL:
For systems prior to Microsoft® Windows® 2000, the default verb is used if it is valid and available in the registry. If not, the "open" verb is used.
For Windows 2000 and later systems, the default verb is used if available. If not, the "open" verb is used. If neither verb is available, the system uses the first verb listed in the registry.
lpFile
Address of a null-terminated string that specifies the file or object on which to execute the specified verb. To specify a shell namespace object, pass the fully-qualified parse name. Note that not all verbs are supported on all objects. For example, not all document types support the "print" verb.
lpParameters
If the lpFile parameter specifies an executable file, lpParameters is an address to a null-terminated string that specifies the parameters to be passed to the application.The format of this string is determined by the verb that is to be invoked. If lpFile specifies a document file, lpParameters should be NULL.
lpDirectory
Address of a null-terminated string that specifies the default directory.
nShowCmd
Flags that specify how an application is to be displayed when it is opened. If lpFile specifies a document file, the flag is simply passed to the associated application. It is up to the application to decide how to handle it.
SW_HIDE Hides the window and activates another window.
SW_MAXIMIZE Maximizes the specified window.
SW_MINIMIZE Minimizes the specified window and activates the next top-level window in the z-order.
SW_RESTORE Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when restoring a minimized window.
SW_SHOW Activates the window and displays it in its current size and position.
SW_SHOWDEFAULT Sets the show state based on the SW_ flag specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. An application should call ShowWindow with this flag to set the initial show state of its main window.
SW_SHOWMAXIMIZED Activates the window and displays it as a maximized window.
SW_SHOWMINIMIZED Activates the window and displays it as a minimized window.
SW_SHOWMINNOACTIVE Displays the window as a minimized window. The active window remains active.
SW_SHOWNA Displays the window in its current state. The active window remains active.
SW_SHOWNOACTIVATE Displays a window in its most recent size and position. The active window remains active.
SW_SHOWNORMAL Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
Return Values
Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Microsoft® Windows® applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an integer and compare it with the value 32 or one of the error codes below.
0 The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
ERROR_BAD_FORMAT The .exe file is invalid (non-Win32® .exe or error in .exe image).
SE_ERR_ACCESSDENIED The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid.
SE_ERR_DDEBUSY The DDE transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL The DDE transaction failed.
SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND The specified dynamic-link library was not found.
SE_ERR_FNF The specified file was not found.
SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
SE_ERR_OOM There was not enough memory to complete the operation.
SE_ERR_PNF The specified path was not found.
SE_ERR_SHARE A sharing violation occurred.
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
Eh...
The sound section look easy but.. i cant get it to work, will you please make a litle example cuz i cant figure it out....
|
|
|
|
|
Look up this function in the windows api documentation:
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound );
usage:
::PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_SYNC|SND_NODEFAULT); //plays "bells.wav"
See the topic "Waveform audio" in the Visual Studio documentation.
Jim
|
|
|
|
|
Hmmm
still cant get it to work right, this is what i did with a butten....
void CTestSoundDlg::OnSoundtest()
{
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound );
PlaySound("C:\\TEST.WAV", NULL, SND_SYNC|SND_NODEFAULT); //Sound Test
}
And here is the error i get
C:\My Documents\C++\TestSound\TestSoundDlg.cpp(177) : error C2065: 'SND_SYNC' : undeclared identifier
C:\My Documents\C++\TestSound\TestSoundDlg.cpp(177) : error C2065: 'SND_NODEFAULT' : undeclared identifier
Error executing cl.exe.
TestSound.exe - 2 error(s), 0 warning(s)
Hmmm i think i need some more help, i cant figure out what i did wrong..
Thanks
|
|
|
|
|
Your line compiles fine in my code, so I don't know why it doesan't in yours, butaccording to MSDN:
Windows NT/2000: Requires Windows NT 3.1 or later.
Windows 95/98: Requires Windows 95 or later.
Header: Declared in Mmsystem.h.
Library: Use Winmm.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000.
but I assume that you have your includes OK, otherwise it wouldn't recognise the command. The constant values of the two flags you're using are 0x0000 and 0x0002, so try putting the numberical value instead, just to see if that compiles and runs. The problem is obviously that your environment is unaware of the definition of the two constant values.
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
Two things could be missing:
1- You did not include this line >mmsystem.h< in the stdafx.h
2- You did not include/link to the WINMM.LIB in the linker ALT+7 list.
Try and should work fine-> coz the code is good!
|
|
|
|
|
Two things could be missing:
1- You did not include this line <mmsystem.h> in the stdafx.h
2- You did not include/link to the WINMM.LIB in the linker ALT+F7 list.
Try and should work fine -> coz the code is good!
|
|
|
|
|
I suggested that too, but if it's a lib error, it should know the constants defined and fail in the link stage, and if it's the #include, how come it knows PlaySound, but not the constants ?
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
Thanks all i really needed your help...
|
|
|
|
|
Anyone out there written anything to do byte order swapping?
I have a mixed file containing both Big endian and Little endian 32 bit integers. I read the u_long ntohl(u_long network) function in winsock2.h but it does not give me the correct value back when I swap it. I tried this and got mixxed result based on reading by char 1 2 3 and 4 times.
union byte4
{
int I;
char ch[4];
}
did swap with this function
byte4 swap(byte4 in)
{
byte4 swp;
swp = in;
in.ch[0] = swp.ch[3];
in.ch[1] = swp.ch[2];
in.ch[2] = swp.ch[1];
in.ch[3] = swp.ch[0];
in.ch[4] = NULL;
return in;
}
Any ideas whats going wrong here?
|
|
|
|
|
Hello mate,
This is what I use and it works
DWORD ReverseByteOrder(DWORD* pdwRaw)
{
unsigned char c[4];
memcpy( &c, pdwRaw, 4);
DWORD dwReturn = c[3] | (c[2] << 8) | (c[1] << 16) | (c[0] << 24);
return dwReturn;
}
Hope this helps!
|
|
|
|
|
Is there a way, to place a CFileDialog into a Propertysheet. I now there is a way, MS did it!
Please help
Sjoerd
|
|
|
|
|