|
Thanks for the heads up on the swprintf_s. I appreciate the attention to detail and efficiency you gave me today. tough learn today, but it works well.
Changed it to this now.
case BINDSTATUS_DOWNLOADINGDATA:
dBytes = ((float)ulProgress / (1024*1024));
dTotal = ((float)ulProgressMax / (1024*1024));
dPercent = dBytes/dTotal*100;
if ((dBytes > 0.10) && (dTotal > 0.10)) {
swprintf_s(szStatusMessage, 80, L"Downloading %.2f MB of %.2f MB [%.1f%%]", dBytes, dTotal, dPercent);
iMsgLen = wcslen(szStatusMessage);
szStatusMessage[iMsgLen] = '\0';
}
break;
|
|
|
|
|
jkirkerx wrote: iMsgLen = wcslen(szStatusMessage);
szStatusMessage[iMsgLen] = '\0';
wcslen() relies upon szStatusMessage being \0 terminated, so these two statements don't do anything useful.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
I didn't know that. I'll experiment with removing them and see what happens. I'm sure your right on that. That means less code to type for me in the future.
Thanks Dave,
|
|
|
|
|
I used swprintf, I think the wsprintf was for tchars. It will do for now
WCHAR szBytes[20];
WCHAR szTotal[20];
swprintf(szBytes, L"%.2f", dBytes);
swprintf(szTotal, L"%.2f", dTotal);
|
|
|
|
|
Alright I'm still learning here so don't laugh, but I was able to consolidate the whole thing into one swprintf_s, to produce my status message. That's pretty cool. I wonder if I should of just used TCHAR and wsprintf_s and went the Microsoft way?
FYI:
I started with vb, so I was use to building strings together with &, or + in JavaScript.
dBytes = ((float)ulProgress / (1024*1024));
dTotal = ((float)ulProgressMax / (1024*1024));
if ((dBytes > 0.10) && (dTotal > 0.10)) {
swprintf_s(szStatusMessage, L"Downloading %.2f MB of %.2f MB", dBytes, dTotal);
iMsgLen = wcslen(szStatusMessage);
szStatusMessage[iMsgLen] = '\0';
}
|
|
|
|
|
jkirkerx wrote: I started with vb, so I was use to building strings together with &, or + in JavaScript.
You can still do that with MFC's CString class, or with the STL's std::string class.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
DavidCrow wrote: You can still do that with ..., or with ... That was the point of my aleph-null quip above.
Cheers,
Peter
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|
I got few of these linker errors in my application.
I have reloaded the VC 6.0 - no SP packs yet and build a simple MFC ( all defaults) application and now I am getting same linker error.
I have not changed anything, using default setting.
I am guessing some library got "corrupted", but which one?
Any clue what is happening here?
Linking...
ChildFrm.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWnd::SetOccDialogInfo(struct _AFX_OCC_DIALOG_INFO *)" (?SetOccDialogInfo@CWnd@@UAEHPAU_AFX_OCC_DIALOG_INFO@@@Z)
MainFrm.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWnd::SetOccDialogInfo(struct _AFX_OCC_DIALOG_INFO *)" (?SetOccDialogInfo@CWnd@@UAEHPAU_AFX_OCC_DIALOG_INFO@@@Z)
TSET2View.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWnd::SetOccDialogInfo(struct _AFX_OCC_DIALOG_INFO *)" (?SetOccDialogInfo@CWnd@@UAEHPAU_AFX_OCC_DIALOG_INFO@@@Z)
Debug/TSET2.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Any help as always will be appreciated. Thanks for your time.
Addendum
Dialog based MFC application compiles just peachy, only SDI and MDI have this linker issue.
Vaclav
After flushing and reinstalling the VC 6.0 from scratch it works.
-- modified 15-Nov-11 16:50pm.
|
|
|
|
|
Are you sure that function (SetOccDialogInfo) is available in this version of MFC (VS 6.0?)
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
I have been using VC 6.0 for at least 15 years and this is the first time I encountered this linker error.
I am going for full reinstall of the VC 6.0 for now.
|
|
|
|
|
Hi,
I have an app that has two tab, "informes" and "variables", but I have to delete the informes tab becouse now it is not used. The code isn't me, and due to it, I don't know how to delete the tab.
This is the app.
http://i42.tinypic.com/2bwfiu.png
I think that the tab is created in Ftab file, but I dont know where.
http://www.megaupload.com/?d=UDMM3WC5[^]
|
|
|
|
|
Paul DiLascia wrote: // Copyright 1999 Paul DiLascia
// If this program works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
As read in FTab.cpp/.h
+10
I'd guess that the 'informes' tab is created(added to the list of tabs) with CFolderTabCtrl::AddItem or perhaps they're all loaded at once from a resource, via the CFolderTabCtrl::Load method.
If you have the source, I'd simply search for 'informes' - I'd check the resources too.
Failing that - if you have a debug build, I'd get Ida Pro Advanced (you can get a free-version) and analyse the exe file, looking for either (a) references to the string 'informes' or (b) references to any/all functions in the CFolderTabCtrl class.
|
|
|
|
|
Is this a property sheet/page arrangement? Have you checked the sheet's constructor?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Yes I cheked, and I think that here there aren't any to indicate the number of tab.
In " AdestView.cpp" there is a function that call one function of this file:
[code]
void CAdestView::OnUpdate(CView* , LPARAM , CObject* )
{
........
....
...
if (!m_wndFolderTab.GetItemCount ())
{
m_wndFolderTab.CreateFromStatic (IDC_FOLDERTAB, this);
m_wndFolderTab.Load (IDR_FOLDERTABS);
f = m_Lista.GetFont ();
m_wndFolderTab.SetFonts (f,f);
}
...
...
[/code]
But I don't know how to create only one tab and not two
|
|
|
|
|
antonio343 wrote: But I don't know how to create only one tab and not two
Have you looked for the IDR_FOLDERTABS resource (which I think is a newline-separated list of tab names)?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Hi,
I´m searching for the best way, to define some kind of as function alias in C++
I have the following class:
class c1
{
private:
CString FunctionWithADisturbingLongName(int i);
}
And i want the function to have the long function name, because the function of the function has to be explained in it .
But I want to have a shortcut to the function.
I want to do this
c1 test;
test.short_1(1);
instead of
c1 test;
test.FunctionWithADisturbingLongName(1);
Of course I could declare and define short_1 as a member of c1, and then call FunctionWithADisturbingLongName in it, but there has to be a better solution.
Thank you for helping!
|
|
|
|
|
#define FunctionWithADisturbingLongName test
That might do the trick as well.
Chris Meech
I am Canadian. [heard in a local bar]
In theory there is no difference between theory and practice. In practice there is. [Yogi Berra]
posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]
|
|
|
|
|
That would probably work... although this might make debugging a bit of a pain.
|
|
|
|
|
I could sense the tears falling as I typed in that answer.
Chris Meech
I am Canadian. [heard in a local bar]
In theory there is no difference between theory and practice. In practice there is. [Yogi Berra]
posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]
|
|
|
|
|
...I still five'd the answer since it would probably work.
|
|
|
|
|
It will work, Windows uses it all over the place for the ASCII/Unicode versions of function names.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
I wasn't doubting it.
|
|
|
|
|
The word probably implied that you were not sure.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
The obvious way would be:
class cl
{
public:
CString short_l(int i){ return FunctionWithADisturbingLongName(i);}
}
Now, this has the added clarity of still allowing the compiler to point you in the correct direction for debugging errors. Using a macro would probably switch names on you all the time (if there's an error it'll report the substituted string).
|
|
|
|
|
This is probably the safest and most sensible way of accomplishing what the OP has requested.
Chris Meech
I am Canadian. [heard in a local bar]
In theory there is no difference between theory and practice. In practice there is. [Yogi Berra]
posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]
|
|
|
|