|
I was trying to make this (indeed, Click here to download)
code flikker free and so I altered the CCRDTuningDlg::OnPaint() to the following code:
// CPaintDC dc(this); // this was the original code which flickered
// pg->OnPaint(&dc); // this was the original code which flickered
// CDialog::OnPaint(); // this was the original code which flickered
if (!dont_redraw)
CDialog::OnPaint();
CRect rcClient;
GetClientRect( rcClient );
CDC MemDC, *pDC;
CBitmap MemBitmap;
pDC = this->GetDC();
MemDC.CreateCompatibleDC(pDC);
MemBitmap.CreateCompatibleBitmap( pDC, rcClient.right, rcClient.bottom );
CBitmap *pOldBitmap = ( CBitmap* ) MemDC.SelectObject( &MemBitmap );
MemDC.FillSolidRect(rcClient, RGB(224,223,227));
pg->OnPaint(&MemDC);
pDC->BitBlt(95,0,rcClient.right,rcClient.bottom,&MemDC,95,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
ReleaseDC(pDC);
ReleaseDC(&MemDC);
dont_redraw = true;
But now the processor shoots up to the maximum as the application starts. Comment the new code and un-comment the old code to see the difference.
I'm an engineer in electronics, so programming isn't my strongest side.
For those who are interested, this program is used to reprogram a Common Rail engine tuning box. By doing this, you can gain up to 40% of power.
Greetz Tom
|
|
|
|
|
dont_redraw = false;
this line has to be added to all on-button functions to make it work completely. But this still doesn't solve the previous problem!!!!
Greetz Tom
|
|
|
|
|
If you don't call CDialog::OnPaint() or create a CPaintDC object then Windows won't know you've handled the WM_PAINT message and will continuously send them to you. Instead of calling GetDC() , use a CPaintDC instead.
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
Thank you very much. Just un-commenting CPaintDC dc(this) was already enough. Great work.
|
|
|
|
|
I have upgraded my C++ 6 project to C++ 7.
A feature I liked in 6 was you could put your debug exe in the file structure that you use (ie move it from the debug folder) and point at it for debugging by using Project-Settings-Debug-Executable for debug session
I can't find out how to do this in C++ 7
All I can find is to right click on the project name in Solution Explorer the choose Properties and under Debuggin I find "Working Directory" but can't find anywhere to input the debug exe path.
Anyone know how to do this.
Thanks
Phil
Phil
|
|
|
|
|
I have a main dialog, which starts several modeless subdialogs.
All these can switch between each other, simply by SetFocus.
However, when a dialog is minimized, I can't bring it back from another (related) dialog.
When I click on its icon on the task bar to restore it (or press Alt-Tab), it receives WM_ACTIVATE, and then WM_COMMAND with SC_RESTORE.
I post WM_SYSCOMMAND with SC_RESTORE, and I post WM_ACTIVATE, it does not matter, and SetWindowPosition to the activating dialog, for following the minimized one in the z-order - all that does not help.
However, what makes it more interesting: IF the dialog, which wants to activate the minimized one loses the focus to any other, UNRELATED dialog, then WM_SYSCOMMAND with SC_RESTORE activates the minimized one.
It may be noteworthy, that the subdialogs have been Created with the desktop as parent (otherwise the main dialog always overlays the subdialogs).
Does anyone know more about this?
|
|
|
|
|
Hello,
I'm trying to figure out the best way to write List control that has sub-items (columns) which are of arbitrary data types that change at run-time (int, COleDateTime, CString, bool, etc.). What is the most efficient way to implement this?
thanks,
JennyP
|
|
|
|
|
Hi All,
I have a application written in MFC and would like to convert it into a dll. Does anyone ahve a idea how to do this?
Vinayak
|
|
|
|
|
Is there a Windows message to intercept for when a new window gets focus? I'm making an app to track my usage of programs, but right now it just calls GetForegroundWindow() ever 1/2 a second. I'm trying to find if there's a message I can just handle so it doesn't execute the code UNLESS a different window gets the focus. right now it only does something if the text changed from last time it checked, which is held in a CString member variable.
My articles
www.stillwaterexpress.com
BlackDice
|
|
|
|
|
I'm going out on a limb here and grasping at straws but what would happen if you call SetWindowsHookEx(WH_CALLWNDPROC, ...) and looked for all WM_ACTIVATEAPP and/or WM_ACTIVATE messages?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
|
Hello,
I've found many resources on creating and manipulating menus, but how do I simply change the default MFC MDI Main Frame menu from the default menu that VC++.net offers upon creating a new project? I'd like the replacement menu to show up when the application begins with no need for the old (VC++.net default) menu. I've tried replacing the menu resource in the resource editor, but this crashes my app.
thanks,
JennyP
|
|
|
|
|
bitpusher wrote:
I've tried replacing the menu resource in the resource editor, but this crashes my app.
That's what you need to do. You need to figure out what is wrong with your menu changes and fix it. It certainly seems very strange that even a messed up menu could crash an app. You might want to run it in the debugger and see what is happening.
Neville Franks, Author of ED for Windows www.getsoft.com and Surfulater www.surfulater.com "Save what you Surf"
|
|
|
|
|
Hope this an appropriate forum for this.
I'm a longtime user of C++ MFC (4.2 in VS 6.0) but new to COM (and VS2003). I'm trying to write a control using COM, so I started with the VS2003 supplied step-by-step tutorial 'dispsink'.
Using the supplied files, I was able to create and build both the client and the server. The build process (apparently) registered the control according to the log window, and I could find the entries with regedit.
However, using VS menu Tools, Active X Container, then selecting Edit:Insert New Control the name of the control does not show in the list.
I tried re-registering using File, Register... and I can see the control in that list (DispClient.DispCtl.1). But I can't get it into the Insert Control list, or into the container tool. Why can't I see it in the Insert New Control list? It seems that unless I can, it won't go into the container and I can't work with it. I'm sure I'm missing something simple - what is it?
BTW, when I tried building the tutorial by hand, step-by-step, the compiler built the client OK, but when building the server it crashed with 'serious internal error' , 'Tell Microsoft about this..." dialogs, and non-helpful diagnostics about possible wrong options ... any comments on this? (I checked my code thoroughly, but you never know for sure...)
OS is XP Pro SP2.
Any reading suggestions for getting up to speed on this topic also welcome.
caronwill
|
|
|
|
|
Than is possible to replace MFC method AfxFindResourceHandle not resorting to MFC, for example on Win32 API.
I need a method for load a resource from app and/or DLL.
Best regards,
Eugene Pustovoyt
|
|
|
|
|
Have you looked at AfxFindResourceHandle() in dllinit.cpp to see what it is doing?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
Do you see this code?
AfxFindResourceHandle() method in dllinit.cpp has a few other MFC methods. What I must rewrite all this methods?
Best regards,
Eugene Pustovoyt
|
|
|
|
|
Eugene Pustovoyt wrote:
Do you see this code?
Of course. That's why I suggested the exercise. What you should have noticed, however, is that AfxFindResourceHandle() is nothing more than a fancy wrapper around FindResource() .
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
From memory you just need to specify the hInstance of the EXE/DLL where the Resource lives.
Neville Franks, Author of ED for Windows www.getsoft.com and Surfulater www.surfulater.com "Save what you Surf"
|
|
|
|
|
Good day,
I'm having a problem with group boxes: it won't repaint controls within it in a custom / non-Doc/View MDI Window.
According to MSDN (1999: "PRB: BS_GROUPBOX-Style Child Window Background Painting Wrong"), this occurs when the parent window has the style WS_CLIPCHILDREN set. But I don't think this is the case.
In a Doc/View MDI Window, this problem doesn't occur. I compared the window style, styleex, etc. to mine, from the main window to the client, the MDI child and the formview, both are basically "same" but mine won't repaint the contents of the group box.
Ideas? Solutions (without using Doc/View MDI)?
Tnx.
|
|
|
|
|
This is just a guess, but is the group box obscuring (i.e., is it in front of or behind) the other controls?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
Front. I tried the code from MSDN and handled the WM_ERASEBKGND of the group box: paint the client area with the dialog color, have the system paint the group box itself, and have the parent window redraw by trying both RedrawWindow and Invalidate. It did not work, only make the group box appear empty.
I also tried putting the group box back from the rest of the controls. The controls repainted but the group box didn't. Tried to use the same solution ending with the same result. Also modified it to enumerate the rest of the controls and have them repaint themselves (RedrawWindow & Invalidate, MSDN didn't provide a sample code how). Unfortunately, not only is it flickering but also processor intensive when fine tuning it to only redraw controls within the group box.
What I'm hoping is similar to the Doc/View Arch. where no additional code was used.
Anyway, will consider other solutions.
|
|
|
|
|
I do not know why putting the group box behind all other controls is not working for you. This method has solved problems for me in the past.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
Thanks for your time but I know now what caused this!
In order to avoid flickering (the MDI child windows are non-(user-)movable but changes size & position (including the controls in it) when the main window is resized), I overrided the WM_ERASEBKGND ON both the CMDIChildWnd and CFormView to return TRUE. Also, I handled the WM_PAINT on the CFormView to manually paint the dialog color and all the controls. It still flickered (but the group box repaints fine). I modified it and avoided the flicker, which eventually caused the group box not to repaint properly.
Problem solved!
(I have no idea why I missed it!!!)
Thanks for your time
|
|
|
|
|
Hi,
I have created a simple MFC Dialog App with a button. I have also created a Win32 Console App.
Within the dialog app, on the OnClick function of the button, I need to make a call to the Win32 Console App executable. The call can just be to start the exe and pass in some command line parameters.
Does anybody know the correct way of calling this exe and passing in command line arguments.
Cheers
Rav
|
|
|
|
|