|
Hi,
The thing is that my controls are drawing themselves and that I already implemented a memory dc in the drawing code.
Could the problem be that my view is not actually drawing the controls, but just sending a WM_PAINT message to each of my derived CWnd controls ?
|
|
|
|
|
You´re right. You have understood the principle architecture of the Windows API.
My suggestion implies that the area would be drawn by the "containing" window.
Try it @ home. (B&B)
|
|
|
|
|
Thanks for the info, i'll give it a go.
Pyt
|
|
|
|
|
|
By the way, did you know that 'flicker' is dutch 'slang' for a homosexual guy?
Imagine what MS-Word said a few years ago when I typed in a meeting report that one of our applications had a flicker-problem...
(I know this really belongs in the lounge-forum, but I couldn't resist, sorry).
Enjoy life, this is not a rehearsal !!!
|
|
|
|
|
Is there a way to find the minimum necessary size for the buffer argument of vsprintf before making the call?
rechi
|
|
|
|
|
sprintf works by calling a the low-level output function (_output) with a stream handle. that same output function handles all printf-style output (printf, sprintf, fprintf, etc). the output function simply outputs to a stream, which can grow as large as necessary.
so... to simulate it... run down the format string, parse it, add up the size of all the output specs. not easy.
-c
A conclusion is simply the place where someone got tired of thinking.
|
|
|
|
|
Use _vsnprintf and if it returns -1, your buffer is too small.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
If you have MFC installed (with VC6), the CString member "FormatV" (which is internally called by "Format"), does this sort of checking (i.e., runs through the format specifications and makes a "guess" at what size the buffer should be). The code for this function is in "YOUR_ROOT_MSDEV_DIRECTORY_HERE\vc98\mfc\src\strex.cpp"
Chris Richardson
Programmers find all sorts of ingenious ways to screw ourselves over. - Tim Smith
|
|
|
|
|
I have an application where I want to find out the details of a DLL - version, internal name etc. if possible.
There is an original DLL which I need to check and replace with another of the same name.
Any ideas ?
Thanks.
Elaine
Would you like to meet my teddy bear ?
|
|
|
|
|
You can read the version resource from them:
Here's a snippet from my code that does a very simple resource reading. (m_sArquivo has the fileName)
DWORD dwDummyHandle;
CString sArquivo(m_sArquivo.c_str());
DWORD dwSize = GetFileVersionInfoSize(sArquivo.LockBuffer(), &dwDummyHandle);
sArquivo.ReleaseBuffer();
if (dwSize == 0)
throw CWin32Error();
BYTE *lpBuffer = new BYTE[dwSize];
if (!GetFileVersionInfo(sArquivo.LockBuffer(), dwDummyHandle, dwSize, lpBuffer))
{
delete []lpBuffer;
throw CWin32Error();
}
VS_FIXEDFILEINFO *vInfo;
UINT uInfoSize;
if (!VerQueryValue(lpBuffer, _T("\\"), (LPVOID*)&vInfo, &uInfoSize))
{
delete []lpBuffer;
throw CWin32Error();
}
if (uInfoSize == 0)
{
delete []lpBuffer;
throw CWin32Error();
}
std::strstream out;
out << HIWORD(vInfo->dwFileVersionMS) << "."
<< LOWORD(vInfo->dwFileVersionMS) << "."
<< HIWORD(vInfo->dwFileVersionLS) << "."
<< LOWORD(vInfo->dwFileVersionLS) << std::ends;
delete []lpBuffer;
return out.str();
lazy isn't my middle name.. its my first.. people just keep calling me Mel cause that's what they put on my drivers license. - Mel Feik
|
|
|
|
|
I create a project where I include a file.h in another folder in the same project.
when I used #include "myfile.h"
the compiler don't find the file.
How can I do for find it ?
Best Regards
youssef
|
|
|
|
|
use
#include "dir/myfile.h"
lazy isn't my middle name.. its my first.. people just keep calling me Mel cause that's what they put on my drivers license. - Mel Feik
|
|
|
|
|
or add the path ( relative path, not absolute ) to the "additional include directories" in the C++ tab of the project settings.
|
|
|
|
|
If the thumb compiler doesn´t find the file because he doesn´t find the file you must show him the file.
Try it @ home. (B&B)
|
|
|
|
|
The workspace pane lists the following function incorrectly:
<br />
void Show(CRect rectTitle, LPCTSTR lpszTitleText, int xoffset = 0, LPRECT lpHoverRect = NULL, const LOGFONT* lpLogFont = NULL, COLORREF crTextClr = CLR_DEFAULT, COLORREF crBackClr = CLR_DEFAULT);<br />
It will say:
<br />
Show(CRect rectTitle, LPCTSTR lpszTitleText, int xoffset)<br />
When double-clicked, VS shows a messagebox saying it can't find the definition(implementation) of this function. (Well, duh...)
When it's changed (LPRECT changed to something like CRect*), the workspace pane will list the function as:
Show(CRect rectTitle, LPCTSTR lpszTitleText,int xoffset, CRect* lpHoverRect, const int LOGFONT)
Again, it goes awry, and this time it screws up bad... VERY bad. Making a
The only way to get a correct listing in the workspace pane is by removing the default-values....
This bug does not influence the compiling, fortunatly, but it makes debugging these botched functions a bit annoying. (select a different function, then scroll to the botched up one.)
|
|
|
|
|
Hello, everybody. I have an application in which I will have a control box with several data to fill in, several data to be updated, and some command buttons. I also like to add menu facilities.
If I used the mfc (exe) wizard application, either I create a single document or a control-box based application. So,
1. How do I include a control box without having a menu command to invoke it, I mean that the control box appears when I start the application.
2. How do I include menues facilities to the control-box based application?
I have been looking the online help, ans some manuals I have got without success.
Thank you very much,
Eric Manuel Rosales Pena Alfaro
PhD student
Unversity of Essex
Wivenhoe Park
Colchester, CO4 3SQ
Essex, Uk
email: emrosa@essex.ac.uk
tel: +44-01206-87311
|
|
|
|
|
I think you need to read about dialogs, CFormView and related topics.
To create an application with a CFormView
with the wizard, create a SDI ( or MDI ) application and on the last panel, select CFormView as the base class of your view class. the wizard will open the resource editor for the form, where you'll place the different controls.
To create a dialog based application.
with the wizard, on the second panel, choose dialog based ( instead of single or multiple document ). and follow the instructions.
For what you want, I'd suggest going with the first choice, use a CFormView base application.
Max.
|
|
|
|
|
Hello all,
I have started programming in VC7 and visiting this excellent website: it's really a code source 'gold mine' plenty of very helpful articles and code samples.
Now, I have read the following FAQ:
Can I use code snippets and programs in my own work?
Yes. Some authors may have specific restrictions on using code in commercial apps such as providing credit in documentation or sending them an email first, but all code can be used for free.
I have noticed though that in many, many articles *there are'nt* restrictions mentioned at all or only inside the source code i can find something like some comment line ie: '(C) 2002 by programmer name' etc.
But the compiler strips the comments out, right? So i think in the final EXE there will not be any reference to the author.
So far it seems to me that PJ Naughter's Freeware Library (http://www.codeproject.com/library/pj.asp) has one of the clearest specifications about the above:
-You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) when your product is released in binary form.
-You are allowed to modify the source code in any way you want except you cannot modify the copyright details at the top of each module.
-If you want to distribute source code with your application, then you are only allowed to distribute versions released by the author. This is to maintain a single distribution point for the source code.
But in the other articles (those not telling you anything about this stuff)?
I will appreciate very much any opinion/tips in order to be able to correctly reuse the code samples located in this website. As pointed out, i'd like to know especially the correct way to reuse code sampels/snippets not telling any specific and clear restrictions.
for example vould I simply assume in all these situations that it would be right using by default the PJ Naughter's rules?
thanks in advance!
|
|
|
|
|
I'd say put a note in the .readme and the app's about box
Such as "Contains CBlibbleGumbo by Frogstar Scout Industries"
But it's still good manners to email the authors first
--
Help me! I'm turning into a grapefruit!
|
|
|
|
|
Hi:
I meet a problem, it has puzzled me for a long time. I create a COM dll which support MFC, several methods was exposured. The implement code of two methods was shown as follow:
STDMETHODIMP CMyComObj::OnConfiguration(long iReserved, BOOL *pbSuccess)<br />
{<br />
AFX_MANAGE_STATE(AfxGetStaticModuleState())<br />
<br />
CMyCfgDlg dlg;<br />
int rtn = dlg.DoModal();<br />
*pbSuccess = (rtn == IDOK) ? TRUE : FALSE;<br />
return S_OK;<br />
}<br />
<br />
STDMETHODIMP CMyComObj::ShowUIFace(long hParentWnd)<br />
{<br />
AFX_MANAGE_STATE(AfxGetStaticModuleState())<br />
<br />
pdlg = new CMyUIDlg();<br />
if(pdlg != NULL)<br />
{<br />
pdlg->Create(ID_MYUIDLG,CWnd::Fromhandle((HWND)hParentWnd));
}<br />
*pbSuccess = (rtn == IDOK) ? TRUE : FALSE;<br />
return S_OK;<br />
}<br />
The problem is in the first method call, the dialog shown normal and I can use TAB switch focus from one control to another control. When I use the second method call, the dialog shown normal but can't use TAB to switch focus(It does not take effect). The reason is virtual function PreTranslateMessage was not be processed, What's wrong? I want "PreTranslateMessage" be called normally.Please help me!!!
I am seeking...
For what?
Why did you ask me for what? I don't know!
|
|
|
|
|
Sorry, but PreTranslateMessage will not get called inside your dll. You'll have to find another way to do what you want.
Wenn ist das Nunstück git und Slotermeyer? Ja! Beierhund das oder die Flipperwaldt gersput!
|
|
|
|
|
Hi there!
I’m currently playing with a PICO scope. (it’s a small parallel port oscilloscope that runs at 20KHz max.)
I’m trying to make a custom graphical interface showing the results acquired from the scope (was hoping to use it in a dynamometer project I was planning) . This part of the deal runs great. But I wanted to add a horizontal scroll bar to make navigation trough the data easier. So l borrowed from Roger Allens tutorial. On scrollbars (http://www.codeproject.com/miscctrl/Scrollbar.asp) And everything works almost according to plan. Unfortunately I’m using a quite large data buffer. -16 KB to 512 KB. Ant that’s where things get strange. It seems that things behave quite normal when I’m below 32KB.
But as soon as I get above 32 KB the scrollbar position returns to 0 and starts counting over - When using “SB_THUMBTRACK” and “SB_THUMBPOSITION”
But behaves normal (counts and scrolls all the way up to 512KB) when using all the other “positioning” options (like SB_PAGE & SB_LINE)
The problem looks like the variable holding the bar position has a max of 32768 and than turns over to 0. (but only when dragging the bar) That would be a 16 bit signed variable. But the SCROLLINFO.nPos which I use is a int so that shouldn’t be the problem.
My code is as I said pulled more or less directly from Rogers tutorial and looks like this :
// m_datasize is the size of the collected data 16 KB to 512 KB.
int i_CurPos = GetScrollPos(SB_HORZ);
int iPrevPos = i_CurPos;
CRect myRect;
GetClientRect(&myRect);
switch(nSBCode)
{
case SB_LEFT: i_CurPos = 0;
break;
case SB_RIGHT: i_CurPos = GetDocument()->m_datasize;
break;
case SB_LINELEFT: i_CurPos = max(i_CurPos -6, 0);
break;
case SB_LINERIGHT: i_CurPos = min(i_CurPos + 6,(GetDocument()->m_datasize+
myRect.Width() - 110));
break;
case SB_PAGELEFT: i_CurPos = max(i_CurPos - myRect.Width(), 0);
break;
case SB_PAGERIGHT: i_CurPos = min(i_CurPos + myRect.Width(), (GetDocument()- \
>m_datasize + myRect.Width() - 110)); //- myRect.Width()-1));
break;
// The part that doesn’t work
case SB_THUMBTRACK:
case SB_THUMBPOSITION: i_CurPos = nPos ;
break;
// The part that doesn’t work
}
SetScrollPos(SB_HORZ, i_CurPos);
ScrollWindow(iPrevPos - i_CurPos, 0) ;
A bit messy but hopefully readable
|
|
|
|
|
Sorry I forgot the setup of the scroll bar
Its done like this.
SCROLLINFO si ;
si.cbSize = sizeof(SCROLLINFO) ;
si.fMask = SIF_PAGE | SIF_RANGE ;
si.nPage = myRect.Width() - 110; // The 110 is because I type measurement related info in a small box there.
si.nMax = pDoc->m_datasize + myRect.Width() - 110;
si.nMin = 0 ;
I hope someone can help.
Thanks.
|
|
|
|
|
Where I can find a good Howto to bind a dialog box written in C# (Windows Control Library, DLL-File) in an existing unmanaged MFC-Program with Doc/View-Support? Data exchange should be supported.
Thanx you!
|
|
|
|