|
Hello, the codegurus around the world;)
The poster simply misunderstands between CWnd function and Windows API function.
Windows API
HWND GetDlgItem(
HWND hDlg,
int nIDDlgItem
);
And, MFC
CWnd* GetDlgItem( int nID ) const;
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
Also, if the poster wants to use WinAPI function in MFC,
we need the global resultion ::GetDlgItem(...);
Please, don't send me your email about your questions directly.
Have a nice day!
Sonork - 100.10571:vcdeveloper
-Masaaki Onishi-
|
|
|
|
|
Yah! And as you can see exactly like this I called this function:
::GetDlgItem
Or I did smf wrong?
==============
www.design.kg
|
|
|
|
|
I found it here:
http://msdn.microsoft.com/library/en-us/sysinfo/regapi_0tq1.asp?frame=true
is it MSDN mistake, that GetDlgItem take a handle to a window as its first parameter?
==============
www.design.kg
|
|
|
|
|
Hello, the codegurus around the world.;)
First of all, you must understand the dif between C and C++ code.
In msdn example, this is written by C code.
In this case, we don't need the global resolution "::".
VOID QueryKey(HWND hDlg, HANDLE hKey)
{
.....
SendMessage(GetDlgItem(hDlg, IDL_LISTBOX),
LB_ADDSTRING, 0, (LONG) "..");
......
}
However, if you use this one in MFC,
void CMyDialog::QueryKey(...)
{
.....
SendMessage(GetDlgItem(hDlg, IDL_LISTBOX),
LB_ADDSTRING, 0, (LONG) "..");
......
.....
SendMessage(::GetDlgItem(hDlg, IDL_LISTBOX),
LB_ADDSTRING, 0, (LONG) "..");
......
or GetDlgItem(IDL_LISTBOX);
}
Please, don't send me your email about your questions directly.
Have a nice day!
Sonork - 100.10571:vcdeveloper
-Masaaki Onishi-
|
|
|
|
|
Like this:
::SendMessage(::GetDlgItem(m_hWnd, m_list),
LB_ADDSTRING, 0, (LONG) "..");
The result is:
: error C2664: 'GetDlgItem' : cannot convert parameter 2 from 'class CString' to 'int'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
==============
www.design.kg
|
|
|
|
|
Hello, the codegurus around the world.;)
::SendMessage(::GetDlgItem(m_hWnd, m_list),
LB_ADDSTRING, 0, (LONG) "..");
How did you declare m_list? CString m_list?
GetDlgItem has the second parameter as ID of the control.
So, this should take something like IDC_LIST1.
But, are you sure that you add ListBox (ID: IDC_LIST1) on your dialog box?
Simply copying the code never works unless you have enough knowledge
of both MFC and Win32 program in this case.
Or, to be sure, you add ListBox on your dialog box.
This works.
If you declare CListBox m_list;
::SendMessage(m_list.m_hWnd, LB_ADDSTRING, 0, (LONG) "..");
or
m_list.AddString ("..");
or
m_list.SendMessage(LB_ADDSTRING, 0, (LONG)"..");
Please, don't send me your email about your questions directly.
Have a nice day!
Sonork - 100.10571:vcdeveloper
-Masaaki Onishi-
|
|
|
|
|
Oh, ÎÃÐÎÌÍÎÅ ÑÏÀÑÈÁÎ!
thats in my language mean THANK YOU VERY MUCH! Masaaki
==============
www.design.kg
|
|
|
|
|
"::GetDlgItem(m_hWnd, m_list)" <--- error line
The second parameter should be the control id.
replace m_list with the control id,something like IDLIST01
Nish
Sonork ID 100.9786 voidmain
www.busterboy.org
If you don't find me on CP, I'll be at Bob's HungOut
|
|
|
|
|
|
|
Hello,
In the following code, I open a MP3 and read the last 128 bytes of information (to see if the MP3 has a ID3 tag).. This code works fine most of the time.. I click the open button on my app which calls this function.. it works 95% of the time, but every now and then it gives me an error.. "an unnamed file was not found", the file does exist and its in the same directory as all the previous files that I have opened.. if I move or copy the file to another location and try to open it, it opens fine.. weird! Any ideas why??
CFileDialog MP3(TRUE,NULL,NULL,OFN_HIDEREADONLY,"MP3 Files (*.mp3)|*.mp3|");
if(MP3.DoModal() == IDOK)
{
strPath = MP3.GetPathName();
ID3TAG.Open(strPath, CFile::modeRead);
ID3TAG.Seek(-128,CFile::end);
ID3TAG.Read(tagData,128);
Thanks,
Rob
|
|
|
|
|
perhaps the file is open by some other process or thread already?
Nish
Sonork ID 100.9786 voidmain
www.busterboy.org
If you don't find me on CP, I'll be at Bob's HungOut
|
|
|
|
|
It shouldn't be open by any other processes. It's on my local machine, I don't have any other apps that are using the file and I don't have any shares open on my PC. I wonder if the strPath string is getting corrupted some how.. I'll do some traces.
If you have any other ideas please let me know.
Thanks!!
Rob
|
|
|
|
|
It appears that the CFile::Seek function is throwing the error.. Any ideas why? It's like it can't find the end of the file. Is there any trouble shooting methods that I can use to determine the cause of the exception?
Thanks again for you help!
Rob
|
|
|
|
|
I don't usually reply to my own msg's but I figured everything out.. so disregard my last few posts..
Thanks,
Rob
|
|
|
|
|
Are you sure, that the file is opened properly ???
For a better error description you might use SDK functions CreateFile, ReadFile, CloseHandle and GetLastError instead of mfc.
And perhaps a work-around:
Get the file length, move to byte position (FileLength-128) from start, read the last lines ... But to be honest, I don`t believe that it is the Seek which really causes the trouble here...
Regards, Marco
|
|
|
|
|
Hy everyone,
I'm tryng to do an application that show in some window the current amount of memory in the user's hard disc. But when the user is using win 95 before OSR2 the function GetDiskFreeSpaceEx must be replaced by GetDiskFreeSpace, and the MSDN Library tell's me to "you should dynamically link to it via GetProcAddress"... I do everything they tell me to do... but in win 95 my program do not work...
causes an error on kernel32.dll that can't find de GetDiskFreeSpaceExA... please, if someone can help me it's will be great!
I'll post an part of my code that I do the implementation of the MSDN Library:
P_GDFSE pGetDiskFreeSpaceEx = NULL;
pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress (GetModuleHandle ("kernel32.dll"),"GetDiskFreeSpaceExA");
if(pGetDiskFreeSpaceEx)
{
fresult = GetDiskFreeSpaceEx (windowsDir,
(PULARGE_INTEGER)&FreeBytesToCaller,
(PULARGE_INTEGER)&TotalBytes,
(PULARGE_INTEGER)&FreeBytes);
m_strDirSistema = _T( windowsDir );
m_dwQuotaLivreUsuario = /*(DWORD*/FreeBytesToCaller / MEGABYTE; // this lines given
- me warnings of conversion but it's work correctly m_dwEspacoTotal = /*(DWORD)*/TotalBytes / MEGABYTE;
m_dwEspacoLivre = /*(DWORD)*/FreeBytes /MEGABYTE;
}
thanks all, for the attention!
cheers!!
and sorry my english, I'm brazilian
|
|
|
|
|
You say that "MSDN Library tell's" [you to] "dynamically link to it via GetProcAddress"
But in your code, you're trying to dynamically link to GetDiskFreeSpaceExA, not GetDiskFreeSpace.
Sorry to dissapoint you all with my lack of a witty or poignant signature.
|
|
|
|
|
RickyC wrote:
and the MSDN Library tell's me to "you should dynamically link to it via GetProcAddress"...
It does nothin of that sort
It says "To determine whether GetDiskFreeSpaceEx is available, call the LoadLibrary or LoadLibraryEx function to load the KERNEL32.DLL file, then call the GetProcAddress function to obtain an address for GetDiskFreeSpaceEx. If GetProcAddress fails, or if GetDiskFreeSpaceEx fails with the ERROR_CALL_NOT_IMPLEMENTED code, use the GetDiskFreeSpace function instead of GetDiskFreeSpaceEx"
so since you are sure you are on pre-osr2 win 95 dont bother using the GetDiskFreeSpaceEx call and stick to using GetDiskFreeSpace
Nish
Sonork ID 100.9786 voidmain
www.busterboy.org
If you don't find me on CP, I'll be at Bob's HungOut
|
|
|
|
|
Hy,
I'm new to MFC... and don't know much...
but in my MSDN Library (january 2001) has something like this:
/*
Use GetDiskFreeSpaceEx if available; otherwise, use
GetDiskFreeSpace.
Note: Since GetDiskFreeSpaceEx is not in Windows 95 Retail, we
dynamically link to it and only call it if it is present. We
don't need to call LoadLibrary on KERNEL32.DLL because it is
already loaded into every Win32 process's address space.
*/
pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress (
GetModuleHandle ("kernel32.dll"),
"GetDiskFreeSpaceExA");
if (pGetDiskFreeSpaceEx)
{
fResult = pGetDiskFreeSpaceEx (pszDrive,
(PULARGE_INTEGER)&i64FreeBytesToCaller,
(PULARGE_INTEGER)&i64TotalBytes,
(PULARGE_INTEGER)&i64FreeBytes);
if (fResult)
{
}
}
else
{
fResult = GetDiskFreeSpace (pszDrive,
&dwSectPerClust,
&dwBytesPerSect,
&dwFreeClusters,
&dwTotalClusters);
if (fResult)
{
//some code that I'll not put because the space in this page
}
}
if (!fResult)
printf ("error: %lu: could not get free space for \"%s\"\n",
GetLastError(), argv[1]);
}
I Just try to follow this...
and is not working... sorry if I'm doing something stupid
:\
|
|
|
|
|
Download the latest Platform SDK and #include <newapis.h>. That header has wrappers for GetDiskFreeSpaceEx() and other APIs that handle all that linking nonsense for you.
--Mike--
http://home.inreach.com/mdunn/
While I can't be correct on all matters, I can make the reassuring claim that where I am inaccurate, I am at least definitively inaccurate.
your with and
Sonork - 100.10414 AcidHelm
Test out a prerelease build of my Hotfix Checker v2.0! (1
|
|
|
|
|
Thanks! I've been looking for something just like this for ages. I just which I'd searched the CP Forums sooner!
Jeremy Davis
http://www.astad.org
|
|
|
|
|
LOL
Now we know why you asked a "how to search the forums" doubt-question in the suggestions forum...
Nish
My miniputt high is now 29
I do not think I can improve on that
My temperament won't hold
www.busterboy.org
|
|
|
|
|
I tried searching the CodeGuru forums and got loads of rubbish, plus "matches" that basically didn't match!
Jeremy Davis
http://www.astad.org
|
|
|
|
|
Hey Guys
I have a dialog form i have made with a tree control in it. I have the dialog box rezizable how do i get the tree control to rezize with the dialog box.
Cheers
Peter
|
|
|
|
|