|
Thank you, i will try that.
gtx, Fred
|
|
|
|
|
If you would like to create an animated icon with a fixed animation, you can do as someone else suggested, and use an animated cursor resource. There is a page in the MSDN that describes how to do this without using MFC. Basically, there's not much difference between an icon and a cursor, so they can be used interchangably for this purpose.
Another idea would be to use a bitmap instead of an icon. Then you could update the bitmap in its raw RGB/DIB form, and bitblt it on to the screen as needed. This would allow you to generate the frames on-the-fly, intstead of having to rely on pre-stored animations.
--
Paul
"I drank... WHAT?"
|
|
|
|
|
I am experimenting with the MSXML 3 Sax parser.
When responding to the start element event I want to handle the elements attributes. I am going in circles here. The only code I can make work is to copy the entire string retuned into a CString and then trim it to the proper length. Any attemps to just access the character data only return the first character. I have tried variation of strncpy and memcpy and various casting to no effect. Any suggestions would be greatly apperciated.
HRESULT STDMETHODCALLTYPE CMyContentHandler::startElement(
/* [in] */ unsigned short *pwchNamespaceUri,
/* [in] */ int cchNamespaceUri,
/* [in] */ unsigned short *pwchLocalName,
/* [in] */ int cchLocalName,
/* [in] */ unsigned short *pwchRawName,
/* [in] */ int cchRawName,
/* [in] */ MSXML2::ISAXAttributes __RPC_FAR *pAttributes)
{
_bstr_t bstrString(pwchRawName);
CXML *child = new CXML;
CString Name,Value;
Name = pwchRawName;
child->SetTagName(Name);
CComBSTR bstrName;
int max,i,lenUri,lenLocal,lenName,lenValue,j;
const wchar_t *strUri,*strLocal,*strName,*strValue;
HRESULT hr;
hr = pAttributes->getLength(&max);
for (i=0;i<max;i++)
{
="" hr="pAttributes-">getName(i,(unsigned short **)&strUri,&lenUri,(unsigned short **)&strLocal,&lenLocal,(unsigned short **)&strName,&lenName);
hr = pAttributes->getValue(i,(unsigned short **)&strValue,&lenValue);
Name = strName;
Name = Name.Left(lenName);
Value = strValue;
child->SetAttr(Name,Value);
}
if(m_pRoot==NULL)
{
m_pRoot=child;
}
else
{
m_pCurrent->AddChild(child);
}
m_pCurrent=child;
return S_OK;
}
|
|
|
|
|
Most functions use the wchar_t datatype, which is two bytes
per character. To use this data in functions which expect
one byte per character you can use some MFC conversion macros.
I use the following code to extract an attribute and print it:
wchar_t* val;
int valLen;
pAttributes->getValueFromQName(
L"attribute", lstrlenW(L"attribute"),
&val, &valLen);
USES_CONVERSION;
cout << W2T(val) << "\n";
Hope this helps,
Alwin Beukers
|
|
|
|
|
Alwin,
Thanks very much. The W2T conversion is exactly what I was missing
This is now working fine:
int max,i,lenUri,lenLocal,lenName,lenValue;
wchar_t *strUri,*strLocal,*strName,*strValue;
USES_CONVERSION;
HRESULT hr;
hr = pAttributes->getLength(&max);
for (i=0;i<max;i++)
{
="" hr="pAttributes-">getName(i,&strUri,&lenUri,&strLocal,&lenLocal,&strName,&lenName);
hr = pAttributes->getValue(i,&strValue,&lenValue);
Name.Empty();
strncpy(Name.GetBuffer(lenName),W2T(strName),lenName);
Name.ReleaseBuffer();
Value.Empty();
strncpy(Value.GetBuffer(lenValue),W2T(strValue),lenValue);
Value.ReleaseBuffer();
child->SetAttr(Name,Value);
}
|
|
|
|
|
Does anybody have a utility to automatically set the Tools->Options->Directories in Visual Studio 6. I have a number of library folders which I have been adding by hand but it's becoming tedious to re-add them when I change machines, log on as a different user. It is especially annoying when after adding the directories, Visual Studio manages to lose them.
I'm looking for something that will take a text file like
[Include]
\littlecat\littleTAPI\include
\littlecat\littleMFC\include
[Lib]
\littlecat\littleTAPI\lib
[src]
\littlecat\littleTAPI\src
and automatically set the directories.
I'm assuming the directory values are stored somewhere under the HKEY_CURRENT_USER\Software registry key. If this is the case I might have a go at writing an app to do it if nobody knows of an existing one.
cheers,
Michael
|
|
|
|
|
It believe that the registry key is:
HKEY_CURRENT_USER\Software\Microsoft\Devstudio\6.0\Build System\Components\Platforms\Win32 (x86)\Directories
There used to be a MS utility that made possible saving all or some settings (including dirs) and transfering them to other workstation. However, I don't remember the name or download URL.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
I would like to do the following:
Enable the feature "Select Dynamic IP" - radio button from TCP IP - Dialup Adapter under Properties of Network Neighbourhood.
Detail: I would like an API that does this job for me..
Enable Dynamic IP Configuration Radio button from
Network Neighbourhood -> properties -> TCPIP Dial Up Adaptor ->Select Dynamic IP radio button enabled.
Thanks
|
|
|
|
|
Hi,
I'm trying to change the windows 'appearance' colours, as you would in Display Properties | Appearances, only programatically.
I'm aware of the registry keys beneath
HKCU\Control Panel\Colors
such as
HKCU\Control Panel\Colors\Desktop
and these keys hold an rgb value.
I've been changing these settings in my application and then have tried :
::PostMessage(GetDesktopWindow()->GetSafeHwnd(), WM_SETTINGCHANGE, NULL, NULL);
and
GetDesktopWindow()->RedrawWindow(NULL, NULL);
to try to make these registry settings take effect, but without luck!
In changing the colors through the Display Properties | Appearance tab, the registry keys which i change are being changed in just the same way as my program does, so the missing link is a function call or registry update which has the same effect as pressing the 'Apply' button in the Display Properties tab
I'm aware of the two different desktops, i am not using IActiveDesktop as this code is for Windows NT 4.0
Any help or suggestions would be very much appreciated, even if it's just a guess or seems unimportant! My searches through MSDN and the internet have given me precious little information ...
Thanks
Jase
|
|
|
|
|
|
Thankyou Tomasz!
That is exactly what i was looking for ...
Jase
|
|
|
|
|
is it a CPU or else?
if i use AMD or Cyrix, what is my platform (intel or alpha)??
thanks in advance.
|
|
|
|
|
is it a CPU or else?
Yes, Alpha is a processor developed by DEC, then sold to Compaq. Compaq then stopped the development of this processor line, so Alpha is more or less dead.
if i use AMD or Cyrix, what is my platform
Intel - both AMD and Cyrix are using Intel's instruction set. AMD defines some extensions.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
thank so much...very kind and clear!
|
|
|
|
|
I have a dll that implements a debug console (i.e. an application can send messages to it during run time) made of a window with a textbox on it. It's set up so that the first call to ConInit creates the window and displays it, but subsequent calls to ConInit simply return TRUE. In this way, the same console is used by several apps. My problem is that if I run 2 or more applications, when I shut down the first one, it kills my debug console. How can I lock the window so it's not destroyed until the last reference to it is gone (and yes, I'm using reference counting, so that's not it). Anyway, here's some of the pertininet code:
HINSTANCE g_hInstance= NULL;
HMENU g_hMenu= NULL;
HWND g_hOwner= NULL;
#pragma data_seg(".SHARED")
HWND g_hWnd= NULL;
HWND g_hTextBox= NULL;
WNDPROC g_hOldTextBoxProc= NULL;
COLORREF g_clrTextColor= RGB(192,192,192);
COLORREF g_clrBackColor= 0;
HBRUSH g_hBrush= NULL;
HFONT g_hFont= NULL;
BOOL g_bShowTime= FALSE;
BOOL g_bShowSourceHwnd= FALSE;
BOOL g_bShowSourceCaption= FALSE;
UINT g_uRefCount= 0;
#pragma data_seg()
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
g_hInstance=hInstance;
g_uRefCount++;
break;
case DLL_PROCESS_DETACH:
g_uRefCount--;
if (g_uRefCount==0)
{
DeleteObject(g_hBrush);
DeleteObject(g_hFont);
SetWindowLong(g_hTextBox, GWL_WNDPROC, (LONG)g_hOldTextBoxProc);
DestroyWindow(g_hWnd);
}
break;
}
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
RECT rect;
LOGFONT lf;
switch(uMsg)
{
case WM_CREATE:
g_hTextBox=CreateWindowEx(WS_EX_CLIENTEDGE,
"EDIT",
NULL,
WS_VISIBLE|WS_CHILD|WS_BORDER|WS_HSCROLL|WS_VSCROLL|ES_MULTILINE|ES_NOHIDESEL,
1,
1,
1,
1,
hWnd,
NULL,
g_hInstance,
NULL);
if (!g_hTextBox)
return -1;
lf.lfCharSet=ANSI_CHARSET;
lf.lfClipPrecision=CLIP_DEFAULT_PRECIS;
lf.lfEscapement=0;
strcpy(lf.lfFaceName, "Courier");
lf.lfHeight=-10;
lf.lfItalic=0;
lf.lfOrientation=0;
lf.lfOutPrecision=OUT_DEFAULT_PRECIS;
lf.lfPitchAndFamily=FF_ROMAN|DEFAULT_PITCH;
lf.lfQuality=DRAFT_QUALITY;
lf.lfStrikeOut=0;
lf.lfUnderline=0;
lf.lfWeight=FW_NORMAL;
lf.lfWidth=0;
g_hFont=CreateFontIndirect(&lf);
SendMessage(g_hTextBox, WM_SETFONT, (WPARAM)g_hFont, 0);
g_hOldTextBoxProc=(WNDPROC)SetWindowLong(g_hTextBox, GWL_WNDPROC, (LONG)EditWndProc);
return 0;
break;
}
BOOL WINAPI ConInit(HWND hWndOwner)
{
WNDCLASS wc;
g_hOwner=hWndOwner;
if (!g_hWnd)
{
memset(&wc, 0, sizeof(WNDCLASS));
wc.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
wc.hCursor=LoadCursor(NULL, IDC_ARROW);
wc.hInstance=g_hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName="DebugConsole";
if (!RegisterClass(&wc))
return FALSE;
g_hWnd=CreateWindow("DebugConsole",
"Debug Console",
WS_OVERLAPPEDWINDOW&~WS_MAXIMIZEBOX,
CW_USEDEFAULT,
CW_USEDEFAULT,
600,
300,
NULL,
NULL,
g_hInstance,
NULL);
if (!g_hWnd)
return FALSE;
g_hMenu=CreateMenu();
AppendMenu(g_hMenu, MF_STRING, IDM_CLOSE, "Close");
SetMenu(g_hWnd, g_hMenu);
g_hBrush=CreateSolidBrush(g_clrBackColor);
}
return TRUE;
}
Thanks for any advice.
Jamie Nordmeyer
Portland, Oregon, USA
|
|
|
|
|
A shot in the dark: maybe you should use CS_GLOBALCLASS as class style?
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
just a quick simple question.
Do you have to use memfree after your finished with a block you created with memset?
|
|
|
|
|
memset() doesn't create (allocate) memory. Use malloc() instead.
/ravi
"There is always one more bug..."
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
I'm writing a app. that connects to a ftp server and downloads /uploads some files. I also need smb support and the app must also be able to mount a network share and do similar ftp stuff. My first instinct was to use communication pipes. howeevr I need the app to be Win9x compatible too. My next guess is using Winsock.
how do I mount a network share in WinNT?
Any comments/advise?
TIA.
I'm an alien, I'm an alien
it's a beautiful life....
Bush
|
|
|
|
|
Hi,
I want to show the vertical scroll bar always in the view (derived from CRichEditView) of my MDI application. The problem is, by default the scroll bar is shown only when it is required. But I want to show the scroll bar always, even if there is nothing to scroll in the view. How do I do that. I tried ShowScrollBar, ModifyStyle ...but no result. ( this is in Win 95 machine)
Shrinivas
|
|
|
|
|
Hi,
I create a thread that run's for quite a long time. I want a "nice" way of terminating the thread from outside it. The only way I know at the moment is by TerminateThread, but this is not recommended. Are there any better ways?
Thanks
Neil
|
|
|
|
|
The only 'clean' way to terminate the thread is from the thread itself. It should periodically check for a signal from main thread to end itself - you can implement this strategy using a volatile bool variable. The variable should be initially set to false; when other thread should exit, the variable is set to true.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
There is no nice way of terminating a thread outside of it without some collaboration inside the thread (by the way TerminateThread shoud be used only as a last resort when nothing else worked). It is the thread that has to return upon indication.
There are several methods to signal a thread to die:- Setting some variable that the thread polls periodically,
- if the thread is usually hanged on a
WaitForMultipleObjects() (which is a very usual configuration for dispatching of asynchronous events), have an additional event handle for signalling time to die,
- if the thread pumps messages with a
GetMessage loop, post a termination message with PostThreadMessage(idThread,WM_QUIT,0,0) , or signal its dependent window to die and have this windows do PostQuitMessage() on WM_DESTROY .
Once you've signaled the thread to die, you can sit down and wait fot it to pass away with WaitForSingleObject(hThread,INFINITE) . If however you're not 100% sure your thread is going to behave, you can add a little panic handler just in case:
if(WaitForSingleObject(hThread,10000)!=WAIT_OBJECT_0){
ASSERT(FALSE);
TerminateThread(hThread);
}
CloseHandle(hThread);
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Hi,
I am embedding MSWord In my application, using OLE automation.
But when I goto save i get the saveas method is not available as the
document is been editted in another application.
Code As Follows, from the CanCloseFrame(), i did something similar to insert word into the doc/view architecture
CEmbedWordCntrItem* ViewObj;
ViewObj = ((CEmbedWordView*)pFrame->GetActiveView())
- >m_pSelection;
LPDISPATCH lpDispatch = (ViewObj->GetIDispatch());
_Document doc;
doc.AttachDispatch(lpDispatch);
COleVariant covFalse((short)FALSE);
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
doc.SaveAs(COleVariant("C:\\DataDoc.doc",VT_BSTR), vtOptional.........)
Cheers
Richard
|
|
|
|
|
I'm using a function to set a file for saving data. The function requires an LPSTR typr
for the filename parameter. The filename will be retrieved from an edit box in the application
dialog and it is presently type CString. When I build the project I get an error in the setDisk
function that says. "cannot convert parameter 2 from 'class CString' to 'char *'".
How do I fix this?
|
|
|
|
|