|
Hi,
I'm dealing with dialog based window with a lot's of graphics.
I'm not using Invalidate() anywhere - instead I do
-----------------
dc.BitBlt(0, 0, m_nWallpaperWidth, m_nWallpaperHeight , &m_dcMemory, 0, 0, SRCCOPY);
------------------------
in OnPaint function - this copies always updated offscreen dc to real ( viewable ) one.
The problem is : when I run few copies of this application and put windows
one on other and start moving them , sometimes there're GREY RECTANGLES and LINES
left on bottom windows.
This probably happens because overlapped window just
doesn't have enough time to update itself.
So , I was told by somebody that there exists window style/mode that Windows OS itself
restores overlapped areas of windows from Video Card Memory without making applications
themself to do it in their OnPaint.
It actually means , that these windows just won't get WM_PAINT message - "windows OS" will
restore them.
Maybe I just need to override OnEraseBkgnd , but i tried it ( drawing with NULL brush and
returning TRUE ) and it doesn't help.
I hope it was clear enough and somebody who understand me will say
1) if there is really such a style/mode
2) how exactly it's called
3) how i apply it
Thanks !
Leon
|
|
|
|
|
You can register the window class with the CS_SAVEBITS style flag. See the docs for the WNDCLASS structure. This might be what you are looking for, but it isn't recommended for large windows.
|
|
|
|
|
Nice, I'll check this in MSDN.
You are the one , that always helps me - Thank You Tim !
BTW , what is "large" window - how much is it in MB ?
|
|
|
|
|
The CS_SAVEBITS style that I mentioned in that last message is for saving the bitmap of the screen the window will obscure - not the window itself.
Still, it might be what you had heard mentioned.
Have you tried responding to WM_ERASEBKND with a BitBlt as well?
|
|
|
|
|
Cool idea, checking it just right now ...
|
|
|
|
|
Ok , placing the same code as in OnPaint to OnEraseBkgnd doesn't help.
I've read MSDN about cs_savebits :
----------------------------
CS_SAVEBITS :
Menus, dialog boxes, and combo list boxes have the CS_SAVEBITS style. When you use this style for a window, Windows saves a bitmap copy of the screen image that the window obscures. First, Windows asks the ...
----------------------------
Seems like it's exactly what I need , BUT it's written that dialog based applications ALREADY HAVE IT ( see above ) - correct me if i'm wrong.\
If not , how I apply it - dialog doesn't have PreCreateWindow like Window applictaion.
|
|
|
|
|
You would need to register a new window class to use CS_SAVEBITS, but again I don't think its what you want - it will only cause your window to save the bitmap of what it is on top of, which won't help you - only the window you're covering.
Blatant plug: I posted an article here that plays with blits and tries to outline the paint messages that need to be dealt with. Although it's a bit non-standard, it might give you some ideas.
|
|
|
|
|
Some thoughts:
- draw only in OnEraseBkgnd
- what are you drawing on, in the dialog? are there controls on it?
- why don't you use a child window to draw?
Paolo
------
"airplane is cool, but space shuttle is even better" (J. Kaczorowski)
|
|
|
|
|
How can I make a edit box scrolling down and stay scrolled down as data is entered into it. Any Help will be greatly appreciated.
-Aaron
|
|
|
|
|
the next code will keep the vertical scroll bar down
when you add line.
int l_nMin, l_nMax;
m_YourCEditControl.GetScrollRange(SB_VERT, &l_nMin, &l_nMax);
m_YourCEditControl.SetScrollPos(SB_VERT, l_nMax, TRUE);
Name: STR
Mission: Take Over The World (c:
Tips: If you build it, he will come.
|
|
|
|
|
Is it possible to not have a main window as normall proscribed?
Basically I would like to use the Dialog builder within Visual Studio to build my "main window." I've tried CreateWindow and CreateDialog all to no avail as they all want parent windows. But unfortunately I want the parent window to be a dialog.
Can anyone help me out in this regard? I've read Petzold and have yet to find anything usefull.
Sean Cody (NullStream)
"As long as you want to live,
everywhere will become heaven.
Afterall, you are still alive."
- End Of Evanglion
|
|
|
|
|
Not entirely sure what you're after, but if you use a style of WS_POPUP you won't need a parent. In fact, specifying this style by itself is the way to get a very minimal window happening.
|
|
|
|
|
Make sure your dialog has the correct properties such as WS_OVERLAPPED. You will need to call RegisterClass before CreateDialog. You'll also need to add IsDialogMessage to your message loop.
dialog.rc:
DialogApp DIALOG DISCARDABLE 0, 0, 416, 229
STYLE WS_OVERLAPPED | WS_MINIMIZEBOX | WS_CAPTION
CLASS "DialogApp"
FONT 8, "Times New Roman"
BEGIN
PUSHBUTTON "Ok",IDOK,214,191,50,14
END
WinMain():
szAppName = "DialogApp"
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = DLGWINDOWEXTRA;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (hInstance, szAppName);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if (RegisterClass(&wndclass)==0)
{
return 0;
}
hwnd = CreateDialog( hInstance, szAppName, 0, NULL);
while (GetMessage(&msg, NULL, 0, 0))
{
if (!IsDialogMessage (hwnd, &msg))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
|
|
|
|
|
Form++ Library provides Microsoft Foundation Class (MFC)/Visual C++ developers with a complete library,ships with full MFC Source Code.Download at http://www.ucancode.net
|
|
|
|
|
This is not the right place for ad spam. Why not pay Chris for a banner ad ?
Christian
Secrets of a happy marriage #27:
Never go to bed if you are mad at each other. It's more fun to stay up and fight.
|
|
|
|
|
Hi all,
I want to use of vector or list continer for adding structure to array, how can i do that ?
For example:
struct myLib
{
.
.
.
} NNN;
vector<<>myLib> vec1;
vec1.push_back(...);
Is it true ?
My month article: Game programming by DirectX by Lan Mader.
Please visit in: www.geocities.com/hadi_rezaie/index.html
Hadi Rezaie
|
|
|
|
|
struct myLib
{
.
.
.
} NNN;
vector<<>myLib> vec1;
vec1.push_back(...);
This will work, but if you use pointers to structs then you need to do this to dereference an iterator
(*it)->mymember
If you don't use pointers then you'll need to provide operator = for your struct if it contains any non-simple types. Of course, if it contains large items like a bitmap, this will also slow things down a *lot*. Finally, if you put pointers in, you need to call delete on them as you pop them from your vector, or remove them from your list.
Christian
Secrets of a happy marriage #27:
Never go to bed if you are mad at each other. It's more fun to stay up and fight.
|
|
|
|
|
Hi and thanks for your reply ...
Now, i know for adding new impelement to array i can use of vector or list continer ...
And i know vector can add new impelement in the last array and can't add new implement in middle the array, but list can ...
I wanna know, how ?
My month article: Game programming by DirectX by Lan Mader.
Please visit in: www.geocities.com/hadi_rezaie/index.html
Hadi Rezaie
|
|
|
|
|
Because a vector is an array, to put something in the middle you need to reallocate the whole memory block. The insert function allows you to do it, and if it's full of pointers then I guess it's not so bad. But the thing is if you want random insertion/deletion, you should go for a list. If however, the loss of speed for random access is a problem go map - it's a binary tree which gives a good compromise between fast random insertion and fast random access.
Christian
Secrets of a happy marriage #27:
Never go to bed if you are mad at each other. It's more fun to stay up and fight.
|
|
|
|
|
That's all there is to it. Just keep in mind that it's going to make a copy of the structure each time you call push_back. So depending on what you are storing in your structure it might be better to store a pointer to a structure.
|
|
|
|
|
Well...
I want to create my own application using the Apache server.
Actully, The main purpose is:
A: that the 'Apache' will recieve the data submited by the user from an html.
B: MyServer will get it from the 'Apache' ...
C: And send an answer to the user in XML format
(the XML That will be sent to the user doesn't matter)
Basicly, I want to send an answer to the user.
looking for the MINIMAL code needed,
or links to tutorials or somthin' like that.
10x.
STR
|
|
|
|
|
use cgi. read apache docs.
|
|
|
|
|
Howdy,
I used to know how to do this, but I've completely forgotten what I used to know. Here's the problem.
I have an MFC MDI application. I open it up with a new document. I use the document a while and then press select "File->Save" (or just press the disk icon).
The file dialog appears, open to the current working directory.
I don't want it to open to the CWD, I want the file save dialog to open to a directory that I specify.
How?
thanks
Jim
|
|
|
|
|
You can do it like this:
CFileDialog dlg(...); // whatever initialization you want
dlg.m_ofn.lpstrInitialDir = _T("C:\\My Folder");
dlg.DoModal();
Bret Faller
Odyssey Computing, Inc.
|
|
|
|
|
Thanks, but that doesn't apply here.
If you make a empty MDI app you'll see that it is the MFC framework that calls the FileDialog, not the application programmer.
So I need someway to tell the application framework what value I want to put into m_ofn.lpstrInitialDir before it calls the open/save file dialog.
Jim
|
|
|
|