|
Terry,
Maybe you are thinking it is harder than it actually is,
As long as you aren't using extensive Doc/View architecture,
It's just a lot of Copying and Pasting,
Or stick with your Form/View but in the main init/instance
Hide your main window, and open a Modal Dialog Window that points back to the parent, for your function calls etc,
Actually I always thought anything you manage to do in a dialog App you can do in a form app plus you have Doc/View and serialization etc more readily available !
Regardz
|
|
|
|
|
Hi,
i have a big bitmap file and want to separate it into smaller bitmaps. What is the easiest way to do this?
I thought it would be a good idea to blit a small rectangle of the bitmap into another, smaller bitmap,
but i didn't find out how to do that.
Is it possible that way?
Thank you,
Chris.
|
|
|
|
|
Hi Chris,
You have to create a compatible DC for both source and destination bitmaps, with CreateCompatibleDC().
Then you select those bitmaps in their respective DC with SelectObject().
Then all you have to do is a BitBlt() specifying which portion of the source bitmap is to be copied.
Cheers,
Paolo.
|
|
|
|
|
Hello!
Can anybody help me in my trouble?
I develop application whitch provide his own page setup dialog(Word97 pagesetup dialog analog). I develop and debug it on Epson stylus photo 750 printer. For some my requests I use DeviceCapabilities function with code DC_MAXEXTENT and DC_MINEXTENT. All work fine. Then I try to work with HP LaserJet 4050. It's terrible! DeviceCapabilities return incorrect values, and GetLastError say me what "Data area passed to system call is too small", But MSDN say what i do not shell pass any buffer into DeviceCapabilities with this codes.
Please! If you may halp me, Answer to my question. I be very glad.
|
|
|
|
|
Hello,
in the OO-Land (where we all like to live) it's common to implement Object Models, e.g. this one:
CCompany
>CEmployees
>CEmployee
For the sake of simplicity we'll say that the company class has a member of type CTypedPtrArray (it's the CEmployees collection). Now I'd like to design my hierarchy so, that each employee has got reference (pointer) to it's parent (company).
Now my problem:
Let's say I my CCompany looks somewhat like this:
#include "employee.h" // my employee class
class CCompany{
public:
// details ommitted
CEmployee& AddEmployee(const CEmployee& newemp, CCompany* parent);
private:
CTypedPtrArray<cptrarray, cemployee*=""> m_aEmployees;
}
In this class I need to #include "employee.h". This is fine so far. Now the CEmployee class:
#include "company.h"
class CEmployee{
// details ommitted
private:
CCompany* m_ptrParent;
}
This code doesn't compile. Yes, not even if it is correctly implemented. If you include header A into header B and header B into header A, funny things happen. How do I get this working? What I'm asking for is rather a general answer on how to design such a thing rather then a void*-type-of solution.
Many thanx for your time
Matthias
|
|
|
|
|
Just declare a forward-reference to the classes.
e.g.
class CCompany;<br />
<br />
class CEmployee{<br />
private:<br />
CCompany* m_ptrParent;<br />
}
Then, only in the cpp file, include the "company.h"
Since in your classes, you use only references and pointers, the size of the real class is not needed for the compiler.
|
|
|
|
|
Uwe gave you the correct answer. This problem is solved with forward declarations when only a pointer or reference to the object is used. Since pointers and references are always 4 bytes (in Win32) then the compiler can do its thing without caring about what the pointer/reference is for.
Regards,
Alvaro
|
|
|
|
|
Well, a simple answer for you (I guess <g>) with a big effect for me.
Thanks for your help!
Matthias
|
|
|
|
|
I am finding it impossible to create a popup submenu dynamically inside an existing popup menu (from a template) and then populate it with menu items. I'm trying to modify the tempalte menus inside the CMainFrame::OnInitMenuPopup() handler. I've been through all the CMenu documentation and can't figure out the trick to this. I can insert and append menu items to my heart's content, but not popups! Is there sample code somewhere for doing this sort of thing?
More details: I can successfully create a submenu entry in the popup using CMenu::InsertMenu(..., MF_POPUP, ...) but there is no right arrow in the menu. Also, when I open the popup menu a second time, the submenu entry is grayed out. So I don't seem to be able to begin the submenu successfully, nor can I populate it. I would guess that populating the submenu would also be done by OnInitMenuPopup() when it was called (*if* I could get an arrow on the submenu entry!). A big question here is then how I could know that it is my submenu being passed into OnInitMenuPopup() since there are not any commands yet defined to test against. I was thinking of saving the m_hMenu when I created the submenu and then checking against the CMenu->m_hMenu passed into OnInitMenuPopup()? But this seems a little kludgy. I'm certainly not a "beginner" and I can't figure it out from the docs I've found. Why did they make it this hard?
Mike Newberry
|
|
|
|
|
Hi Mike,
Perhaps this will be of interest to you. I've once made a DLL to be used in CodeWright. This DLL was adding a menu item to an existing menu bar (the one of CodeWright itself). After popupating the pull down menu of the new menu, I added some popup items, which I think is also what you want to do.
I've included here some code snippets. Hope they are useful to you .
First of all, I'm trying to get a pointer to the own made menu item, which I need to start building up the popup menu's.
After that, I'm having a temp variable (pointer) which I'm using to build several submenu's in the pull down menu.
I've added some comments to make it more clear of what has been done. Hope it's clear enough.
I'm using this 'tool' without any problems and the popup menu's are working fine, even in an applications of which the base is not my code (in this case here, it's CodeWright in which I had to fit this mechanism).
B.t.w.: even Premia (the company who makes the CodeWright editor), they couldn't give me a clear answer on what I wanted to do, so after many hours of trying and struggling, I finally found it myself...
As you can see from the code snippet, also graying or check-marking the popup menu item is in (and as such, not so difficult to do )...
///////////////////////////////////////////////////////////////////////////////
// Get a pointer to the menu of which we want to change an item.
// 'pTestMenu' is a pointer to a menu item of a main menu. After retrieving this pointer,
// we can add/change a submenu to this item.
//
int temp_location = 0;
CString temp_string;
m_pWnd->GetMenu()->GetMenuString( temp_location, temp_string, MF_BYPOSITION );
while ( temp_string != "&Gvc" )
{
m_pWnd->GetMenu()->GetMenuString( ++temp_location, temp_string, MF_BYPOSITION );
}
// Get the pointer to the own-made menu item
CMenu* pTestMenu = m_pWnd->GetMenu()->GetSubMenu( temp_location );
// Make a temp. variable of the type CMenu, to create the cascading menu 'on the fly'
CMenu menuPopup;
////////////////////////////////////////////////////////////////////////
// Creation of the popup menu for the Clean selection: "Target" or "All"
//
menuPopup.CreatePopupMenu();
menuPopup.AppendMenu( MF_STRING
, ID_GVCMENU_CLEAN_TARGET
, "Only target items"
);
menuPopup.AppendMenu( MF_STRING
, ID_GVCMENU_CLEAN_ALL
, "All items"
);
pTestMenu->ModifyMenu( ID_GVCMENU_CLEANUP
, MF_POPUP | MF_BYPOSITION | (GVC_executionIsAllowed() ? MF_ENABLED : MF_GRAYED )
, (UINT)menuPopup.Detach()
, "&Cleanup"
);
/////////////////////////////////////////////////////////////////////////////
// Creation of the popup menu for the Dependency selection: "Target" or "All"
//
menuPopup.CreatePopupMenu();
menuPopup.AppendMenu( MF_STRING
, ID_GVCMENU_DEPENDENCIES_TARGET
, "Current target"
);
menuPopup.AppendMenu( MF_STRING
, ID_GVCMENU_DEPENDENCIES_ALL_TARGETS
, "All targets"
);
pTestMenu->ModifyMenu( ID_GVCMENU_DEPENDENCIES
, MF_POPUP | MF_BYPOSITION | (GVC_executionIsAllowed() ? MF_ENABLED : MF_GRAYED )
, (UINT)menuPopup.Detach()
, "D&ependencies"
);
///////////////////////////////////////////////////////////////////////////
// Creation of the popup menu for the Cluster selection.
//
menuPopup.CreatePopupMenu();
ASSERT( m_byNrOfClusters < MAX_NR_OF_TARGETS );
// Add all the targets to the cascading menus, with a max. of MAX_NR_OF_TARGETS items, if they exist
// Otherwise, indicate an empty list.
if ( m_byNrOfClusters != 0 )
{
for ( i = 0; i < m_byNrOfClusters; i++ )
{
menuPopup.AppendMenu( MF_STRING
, ID_GVCMENU_CLUSTER + i
, m_cKnownClusters[ i ]
);
if ( i == m_nClusterNumber )
{
menuPopup.CheckMenuItem( i, MF_BYPOSITION | MF_CHECKED );
}
else
{
menuPopup.CheckMenuItem( i, MF_BYPOSITION | MF_UNCHECKED );
}
}
}
else
{
menuPopup.AppendMenu( MF_STRING
, ID_GVCMENU_CLUSTER
, "No clusters available yet, please choose 'Project Settings...'"
);
menuPopup.EnableMenuItem( ID_GVCMENU_CLUSTER, MF_DISABLED );//MF_GRAYED );
}
// Modify the cascading menu with the new situation: check mark is now added to the
// target which is actually chosen.
pTestMenu->ModifyMenu( m_byClusterMenuPos
, MF_POPUP | MF_BYPOSITION
, (UINT)menuPopup.Detach()
, "Cl&uster Selection"
);
Best regards,
Geert
|
|
|
|
|
Hi again, Mike,
I've seen I misspelled one (or more???) word(s): 'popupating' should of course be 'populating', but since I'm neither English nor American, so my English is not so perfect
Also, I've seen that the processed code (after submitting the article) is removing tabs and/or spaces, so the code snippet is sometimes hard to read.
Sorry for that, but that's out of my control...
Regards,
Geert
|
|
|
|
|
Recently I was given the job to develop functions for the named subjetcs in the Subject field of this post. Date and time I found came along pretty decently and numeric wasnt too bad except for negative sign quirks. Curency added a few more quirks to the negative sign because it tosses in a dollar sign format too. Basically I am writing this today in hopes that someone may read it and be able to supply me with some better insight on easy ways to create these functions. Little tricks maybe, if they exist, which I'm sure theys do. I am only 3months into my experiences with VC++ but I got a decent grasp on these conversions. In fact the implementation of them is underway but I feel they can be improved. If you care to aid me in this at all please email me. Thank You before the fact ...
|
|
|
|
|
GetDateFormat()
GetTimeFormat()
GetNumberFormat()
GetCurrencyFormat()
Don't reinvent the wheel.
|
|
|
|
|
hi,
I wanted to know if there was a way to add to IE's context menu, but not through the registry. My menu items change at the time of invoking the context menu and the menu needs to be dynamic.
I have got as far as displaying my menu prior to IE context menu. If the user cancel my menu IE's context menu is displayed.
But I need to put my menu to IE.
Thanks
|
|
|
|
|
I have a problem using bookmarks with MS Jet OLEDB provider.
I couldn't find of what data type/size are they, so my calls to their functions always fail. Thanks
|
|
|
|
|
I'd like to make my MFC/VC++5 doc-view MDI program work like Microsoft Word: when the user clicks on an inactive view then that click ONLY selects the view rather than selecting the stuff within the view.
The standard MFC behaviour selects the view and ALSO passes the mouse click to the view.
I *think* the solution lies with CView::OnMouseActivate() which is called by the framework during the click. My initial attempt simply used default processing then converted an "activate" return into a "activate-but-ignore-click" return:
afx_msg int CMyView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
int nResult = CView::OnMouseActivate(pDesktopWnd, nHitTest, message);
if (nResult == MA_ACTIVATE)
nResult = MA_ACTIVATEANDEAT;
return nResult;
}
This works great. Too great...
Now ALL mouse clicks get ignored! There's something in the back of my mind about MDI behaviour here.
Am I on the right track ?
Am I missing some step ?
Many thanks
Steve
|
|
|
|
|
How would one go about stripping the exports from a DLL? or simply hidding them form say a util like the Dependancy Walker that comes with VC++.
|
|
|
|
|
I think both methods require a def file (not always a given with a VC project, you may need to create and specify one).
The first method simply exports by ordinal and uses the NONNAME keyword to hide the not_as_mangled_as_we_would_like function names:
EXPORTS
; Explicit exports can go here
;MyClass::MyClass(void)"
??0MyClass@@QAE@XZ @1 NONAME
;MyClass::~MyClass(void)"
??1MyClass@@UAE@XZ @2 NONAME
??yadayada...
i.e. once you have a def file, you edit it supplying the @1 NONAME stuff.
Note: for home use you can leave in the related method name in comments as I have.
The DLLs exports will then appear to the dependency viewer as a series of ordinals, and you'll be able to count the exported functions, but informative names like 'CatchFireAndDeleteHitchhikerExe' will be gone.
There is another method that will remove the ordinals as well, [I think], but when we got this far we went for pizza.
|
|
|
|
|
Can anyone recommend a tool that will accept two executable images and detail the differences between all of the resources in the two images?
We need to do this for localization.
Here is the problem:
We version control the English version of a module.
We also send all relevant resources out for translation.
Meanwhile, the developer is still modifying the English resources.
We then get the localized resources back, and want to apply the changes made between the two English versions to the localized version, if we only knew what those changes were.
The developers are typically too 'busy' to detail every change they made to the resources in the meantime.
So, a tool that can list every change made between the two modules' resources would be very helpful.
Any URL for websites, names of programs, etc. would be most appreciated.
|
|
|
|
|
Why can't you compare the resource scripts?
A few URLs that could help:
Programmer's Tools
Sudden Discharge
I know of a tool - ResourceHacker - that is able to decompile resources.
|
|
|
|
|
Hello...
I am rather familiar with MFC, Windows..
Now I found that soon there will be much needs for COM,
I really want to get inside the ATL..
First of all I need a book that leads me the right way..
(With a month of searching for COM, now I can only use them)
What Book Would You Recommand?
I found "ATL Internals", "Inside ATL", "professional ATL..."
And any more?
Above All If there is good way to get familiar with ATL,
Please Recommand it to me...
Regards
-a beginner
|
|
|
|
|
Hi,
First of all learn the basics of COM programming itself no matter what are you going to use later VB, MFC, ATL or pure C++. Check "Essential COM" by Don Box, it's a nice book for the beginners. Then when you understand what is COM about you can jump into the ATL.
Regards,
Alex Gorev,
Dundas Software.
|
|
|
|
|
"Essential COM" .... For a beginner, hmmmm.
Sorry Alex but....
yes I learned a lot from the Essential COM book. heck, I always thought that Don invented COM..
***BUT***
In the first 4 times I have tried to read the book I always get stuck on the fifth chapter... where Don suddenly speaks in different language
I believe Essential COM is a great book. However it is not for beginners (at least not all chapters)
I recommend, an easier path before digging into Essential COM. like "Understanding DCOM " by William Rubin and Marshall Brain.
Then digging into "Essential COM"
"Essential COM" is a great book, read it after you get your self familiar with the basic concepts first. I did.
This is my Story and I am sticking to it
Alfadhly
|
|
|
|
|
I have been learning C++ and MFC for the past year, and I still feel like I'm struggling! How long did it take anyone else to learn it, and be able to say that they were confident using it? It seems that there is so much to learn.....can anyone recommend a book that really gave them a handle on it??
|
|
|
|
|
Personally, I think it took about 6 months of fairly dedicated effort to learn MFC. MFC was really my first foray into serious O-O development (and I've subsequently learned that MFC is not the best place to learn O-O, sigh...)
To me, learning anything requires a project that demands you figure out problems. I've always used a contact manager/mailing list project my goal as I move from language to language, as it covers most of the needed areas (UI, data access, alogritms, etc.)
First and foremost, make sure you understanding how to program Windows itself (which is *not* OO at all), understanding the basics is key to understanding why MFC does what it does. I had a great book on Borland C++ 4.5 that got me that far, but I'd have trouble recommending that today.
Mastering MFC to me is more about understanding it's wide array of idiosyncratic behaviors. You'll know what you want to do, but it will not be obvious how to get there. A book like Eugène Kain's MFC Answer book will be helpful in outlining this.
If you're serious about developing apps with MFC, you should consider buying a library, like the Dundas toolbox, I found the ability to dig through their code and see how they solved things invaluable.
|
|
|
|
|