|
It is hard to say what the problem is without seeing all your files (and you certainly shouldn't post them all on here!) Just from the post above I am wondering what the 'extern' is for, why you are including OtherHeaderFile.h and OtherHeaderFile2.h, and what the errors are.
|
|
|
|
|
I use the extern in each header file for each global class object (all defined in another header file and included in only one cpp file)
I am going to play around with the extern declarations to try and come up w/ a solution.
|
|
|
|
|
Quick tip: look for missing semicolons at the end of struct /class defs, especially files that have no other code after the def. Everytime I get non-obvious syntax errors early on in the compilation phase, that is the cause.
Peace!
-=- James
Tip for SUV winter driving survival: "Professional Driver on Closed Course" does not mean "your Dumb Ass on a Public Road"! Articles -- Products: Delete FXP Files & Check Favorites
|
|
|
|
|
If you have a header file that will be included in many other source or header files, include it in stdafx.h
<font=arial>Weiye Chen
When pursuing your dreams, don't forget to enjoy your life...
|
|
|
|
|
I am working on an application written in vc++/MFC 7.1. I am looking into a solution for adding scripting support to my application. I have looked at the Microsoft scriping control but it seems limited in its scope and capability. I have also looked into some GNU alternatives (SWIG, Ch, embedded perl interpreter) but it seems they would give me many long nights with integration with MFC. This is my first attempt to integrate a scripting environment with an application so its a learning curve to overcome.
I was curious if anyone with this kind of experience would be so kind as to share some pearls of wisdom on solutions that they have used successfully. What are some things in terms of design to keep in mind when developing an application structure that needs to be extended via scripting environment? Is there any way besides a tangled web of COM interfaces?
Thanks,
padawan
Disclaimer: Any resemblance between the above views and those of my employer, my terminal, or the view out my window are purely coincidental. Any resemblance between the above and my own views is non-deterministic. The question of the existence of views in the absence of anyone to hold them is left as an exercise for the reader. The question of the existence of the reader is left as an exercise for the second god coefficient. (A discussion of non-orthogonal, non-integral polytheism is beyond me)
|
|
|
|
|
|
|
tell please you email addres
gabby
|
|
|
|
|
My e-mail is: irekzielinski -AT- wp.pl
or: author -AT- trayhelper.com
Best regards!
Irek
Check out my software at: http://www.ireksoftware.com
|
|
|
|
|
hello.
Does anybody now how to retrieve the currently selected (highlighted)
filename as shown in the windows explorer window from
a toolbar that is implemented with the TOOL / Desk Band interfaces?
--
When I click on a custom toolbar button, I need to know the
name of the selected file in order to "operate" on that file..
Any help is appreciated!
sas
|
|
|
|
|
Use the SHShellFolderView_Message() function to send the SFVM_GETSELECTEDOBJECTS message to the main browser window.
link : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shshellfolderview_message.asp
This supposedly only works for win 2k+. If you need it for windows 98, there is a trick that might help you - if you're in a deskband, you're in an in-process dll, so you can just send LVM_* messages to the inner list view. I have noticed that the lParam member of the LVITEM structure, for explorer list views, is in fact a pointer to the item's PIDL. This isn't documented, it might not work everywhere, but it does work most of the time.
|
|
|
|
|
thanks.
I am using win XP.
I tried code like this, per your help, but the
app crashes at the SHShellFolderView_Message line:
LPITEMIDLIST* ppidl;
LRESULT numItems = (LPARAM)SHShellFolderView_Message(m_hExplorerHwnd, SFVM_GETSELECTEDOBJECTS, (LPARAM)ppidl);
is there something I'm missing, do I need to instantiate the
array of pidls?
m_hExplorerHwnd is the hwnd of the actual explorer.exe gui
any help is appreciated.
sas
|
|
|
|
|
hmm... I tried it and it crashed too. Never mind, I found a better way. This example lists all the selected items and displays them in a message box:
HWND hWndBrowser = ::GetAncestor(m_hWnd, GA_ROOT);
char szBuf[4096];
IShellBrowser *pISB = (IShellBrowser*)SendMessage(hWndBrowser, WM_USER+7, 0, NULL);
if (pISB)
{
IShellView *pISV = NULL;
if (SUCCEEDED(pISB->QueryActiveShellView(&pISV)))
{
IDataObject *pIDO;
HDROP hDrop;
UINT uNumFiles;
char szFile[MAX_PATH];
pISV->GetItemObject(SVGIO_SELECTION, IID_IDataObject, (void**)&pIDO);
FORMATETC etc = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stg = { TYMED_HGLOBAL };
if ( FAILED( pIDO->GetData ( &etc, &stg )))
return E_INVALIDARG;
hDrop = (HDROP) GlobalLock ( stg.hGlobal );
if ( !hDrop )
{
ReleaseStgMedium ( &stg );
return E_INVALIDARG;
}
uNumFiles = DragQueryFile ( hDrop, 0xFFFFFFFF, NULL, 0 );
szBuf[0] = '\0';
for (UINT uFile = 0; uFile < uNumFiles; uFile++)
{
if (!DragQueryFile( hDrop, uFile, szFile, MAX_PATH ))
continue;
wsprintf(szBuf, "%s\n%s", szBuf, szFile);
}
MessageBox(lpcmi->hwnd, szBuf, "Selected Files", MB_OK);
GlobalUnlock ( stg.hGlobal );
ReleaseStgMedium ( &stg );
pIDO->Release();
pISV->Release();
}
}
This is called from within a band object's IContextMenu::InvokeCommand() method, m_hWnd is the band object's window handle. Since you already have the handle to the main explorer window, you won't have to call GetAncestor().
|
|
|
|
|
thank you; that code worked;
it took me a little bit to
get the right hWnd, but once I
did, I was able to read the selected files..
thanks again.
sas
|
|
|
|
|
I hate to be a newbie but I need this. I made an ActiveX that its only function is return a string with some information of client PC but this doesn't matter ... the problem is... When I invoke my method in my HTML file my method doesn't return any string... I don't know how to make this but I tried by this way:
/****** IDL FILE *********/
dispinterface _DMyActiveX
{
properties:
methods:
[id(60666)] char* GetString();
};
/******Control CPP File*******/
BEGIN_DISPATCH_MAP(CMyActiveXCtrl, COleControl)
DISP_FUNCTION_ID(CMyActiveXCtrl, "GetString", 60666, GetString, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()
char* CMyActiveXCtrl::GetString()
{
return "TestString\0";
}
/******** CONTROL H FILE *****/
// Dispatch maps
DECLARE_DISPATCH_MAP()
afx_msg char* GetString();
/************************************************************/
This is what I changed on original VC++ files... this method works as well to show an MessageBox or an Dialog but it doesn't to just return a string... I don't know the reason... maybe the afx_msg... Can anyone help me??? Thanks!!!!
Wender Oliveira
.NET Programmer
|
|
|
|
|
Maybe since you are not "really" allocating any memory to set the return value, the string value gets cleaned up when the method exits. Try allocating some memory and setting it to the value you want. Do not forget to free the memory when the callee is done using the value.
|
|
|
|
|
I didn't understood... I really haven't experience with C++ and this is the reason that I don't know how to make what you said... Can you show me an example?
I changed the method to:
void CMacAddressCtrl::GetMacAddress()
{
MessageBox("TestString");
}
and it works as well... But when I try to return the char* it returns <null>...
Wender Oliveira
.NET Programmer
|
|
|
|
|
Wender Oliveira wrote:
I really haven't experience with C++
Starting out in C++ with an ActiveX control probably isn't the best path, IMHO.
- Nick Parker My Blog | My Articles
|
|
|
|
|
Hello again, I posted an article last week about how to create a non-rectangular dialog with c++. Well, the solution was to apply Regions to do this but my problem was that I need to smooth my edges because the image is round.
I'm trying to use DirectX to do it, but I don't know if it's possible. I need some help with it and if somebody knows some related article, please, say me.
Thanks.
|
|
|
|
|
Hi!
I am using c++ win32 api.
I declared a string variable and I can append some values to it by the append function.
Everything goes fine if I don't enter a value longer than 15 chars but at 16 it craches...
Can anyone help me?
the code is here:
<br />
...<br />
string mycode;<br />
char values;<br />
...<br />
mycode.append("Hello the value you append is: ");<br />
int len = GetWindowTextLength(GetDlgItem(hwnd, IDC_VALUE));<br />
if(len > 0)<br />
{<br />
GetDlgItemText(hwnd, IDC_VALUE, &values, len + 1);<br />
} <br />
mycode.append(&values);<br />
mycode.append(" is it right?");<br />
SetDlgItemText(hwnd,IDC_CODE,mycode.data());<br />
Thank you very much in advance for your answers!
Well... I am a beginner ...
|
|
|
|
|
...OK I found my error...
The error was in the way I was getting the value from the edit box.
I should have done this:
<br />
...<br />
string mycode;<br />
char values[MAX_PATH];<br />
...<br />
mycode.append("Hello the value you append is: ");<br />
int len = GetWindowTextLength(GetDlgItem(hwnd, IDC_VALUE));<br />
if(len > 0)<br />
{<br />
GetDlgItemText(hwnd, IDC_VALUE, values, len + 1);<br />
} <br />
mycode.append(values);<br />
mycode.append(" is it right?");<br />
SetDlgItemText(hwnd,IDC_CODE,mycode.data());<br />
...I told I was a beginner...
Well... I am a beginner ...
|
|
|
|
|
> if(len > 0)<br />
> {<br />
> GetDlgItemText(hwnd, IDC_VALUE, values, len + 1);<br />
> } <br />
Be sure that len does not exceed the capacity of the buffer you are copying into; in this case, values , which is of MAX_PATH length.
I would change the code to something like this:
GetDlgItemText( hwnd, IDC_VALUE, values, MAX_PATH );
It is OK to ask for "too much text" in this case, the function will copy only what is available in the window or how much your buffer can handle, which ever is less.
Peace!
-=- James
Tip for SUV winter driving survival: "Professional Driver on Closed Course" does not mean "your Dumb Ass on a Public Road"! Articles -- Products: Delete FXP Files & Check Favorites
|
|
|
|
|
I do not know how to focus my question so bear with me.
When you print a document and view it in the pending print queue it has a title column. Is there an API to set the print title?
thanks
|
|
|
|
|
The DOCINFO structure you pass to StartDoc sets this. If you are not calling StartDoc yourself, you can trace into MFC and see if it uses any stuff you can change, or if it is set in an overridable function.
|
|
|
|
|
Following the earlier post ( yesterday ) about slow string generation.
I now use reserve to allocate a generous size to my string, since I don't know the exact size ( even the approximate size ) of the generated string.
Is there a way to reserve a base size, and have the string grow by a certain larger size, instead of small size ? is that what allocator in STL are ?
Thanks.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|