1. 小视频教程 > 知识库 >

comparenocase,有关mfc的问题?顺便问下compare函数作用?

本文目录索引

1,有关mfc的问题?顺便问下compare函数作用?

CString类的Compare方法比较两个字符串的内容,相同则返回0,不同的时候要分情况:对于CString a,b;
a.Compare(b),如果a>b则返回1,如果a<b则返回-1
比如a="abc",b="def",此时根据字典顺序,ab
str是远程socket的返回值
str等于“ok”时,str.Compare("ok")就返回0,0转换成bool值为false,前面再加个取反,则!str.Compare("ok")就是true了
同理str不等于“ok”时,!str.Compare("ok")就是false
if(!str.Compare("ok"))就是判断如果返回值等于“ok”就执行if里面的语句

有关mfc的问题?顺便问下compare函数作用?

2,VC6.0语言设计 有若干计算机图书,请按字母顺序,从小到大输出书名.

#include"stdio.h"
#include"string.h"
#define N 6
void main()
{
char st[N][128]={"ddddd","bbbbb","hhhhhhh","aaaaa","fffff","ccccc"};
char *p[N],*temp;
int i,j,k;
for(i=0;i<N;i++)
p[i]=st[i];
printf("请输入您的书名:");
for(i=0;i<N;i++)
gets(p[i]);
for(i=0;i<N-1;i++)
{ k=i;
for(j=i+1;j<N;j++)
if(strcmp(p[k],p[j])>0)
k=j;
temp=p[i];p[i]=p[k];p[k]=temp;
}
for(i=0;i<N;i++)
puts(p[i]);
}

3,cstring里面如何将单词按照字母顺序排序?谢谢了,大神帮忙啊

我看了一下,有两个函数可以用于字符串的比较,至于排序,冒泡、选择、插入、快排任你选楼 CString::Compare int Compare( LPCTSTR lpsz ) const; 返回值 字符串一样 返回0 小于lpsz 返回-1 大于lpsz 返回1 区分大小字符 CString s1( "abc" ); CString s2( "abd" ); ASSERT( s1.Compare( s2 ) == -1 ); ASSERT( s1.Compare( "abe" ) == -1 ); CString::CompareNoCase int CompareNoCase( LPCTSTR lpsz ) const; 返回值 字符串一样 返回0 小于lpsz 返回-1 大于lpsz 返回1 不区分大小字符 麻烦采纳,谢谢!

4,在C++程序中如何实现查看正在运行的其他程序

//code form MSDN#include #include #include #include using namespace std;// Forward declarations:BOOL GetProcessList( );BOOL ListProcessModules( DWORD dwPID );BOOL ListProcessThreads( DWORD dwOwnerPID );void printError( TCHAR* msg );int main( void ){ GetProcessList( ); return 0;}BOOL GetProcessList( ){ HANDLE hProcessSnap; HANDLE hProcess; PROCESSENTRY32 pe32; DWORD dwPriorityClass; // Take a snapshot of all processes in the system. hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( hProcessSnap == INVALID_HANDLE_VALUE ) { printError( TEXT("CreateToolhelp32Snapshot (of processes)") ); return( FALSE ); } // Set the size of the structure before using it. pe32.dwSize = sizeof( PROCESSENTRY32 ); // Retrieve information about the first process, // and exit if unsuccessful if( !Process32First( hProcessSnap, &pe32 ) ) { printError( TEXT("Process32First") ); // show cause of failure CloseHandle( hProcessSnap ); // clean the snapshot object return( FALSE ); } // Now walk the snapshot of processes, and // display information about each process in turn do { //_tprintf( TEXT("\n\n=====================================================" )); //_tprintf( TEXT("\nPROCESS NAME: %s"), pe32.szExeFile ); //_tprintf( TEXT("\n-------------------------------------------------------" )); cout 31 ) || ( *p == 9 ) ) ++p; do { *p-- = 0; } while( ( p >= sysMsg ) && ( ( *p == '.' ) || ( *p < 33 ) ) ); // Display the message _tprintf( TEXT("\n WARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg );}

5,C++ 如何获得当前电脑里运行的所有进程ID?并关闭指定的进程?

HANDLE GetProcessHandle(int nID)
{
return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);
}

HANDLE GetProcessHandle(LPCTSTR pName)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot) {
return NULL;
}
PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk;
for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)) {
if (!_tcscmp(pe.szExeFile, pName)) {
CloseHandle(hSnapshot);
return GetProcessHandle(pe.th32ProcessID);
}
}
return NULL;
}

关闭进程
int killpro(CString a)//CString a里面就是进程名字。
{
PROCESSENTRY32 pe32;
pe32.dwSize =sizeof(pe32);
HANDLE hpro=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hpro==INVALID_HANDLE_VALUE)
{
return 0;
}
BOOL nowrun=Process32First(hpro,&pe32);
while(nowrun)
{
if(pe32.szExeFile ==a)
{
DWORD proid=pe32.th32ProcessID;
HANDLE hprocess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,proid);
if(hprocess!=NULL)
{
::TerminateProcess(hprocess,0);
::CloseHandle(hprocess);
}
}
nowrun=::Process32Next(hpro,&pe32);
}
}

6,C++怎么把数据库表中的数据添加到MFC的List Control控件中

例如:
CListCtrl m_list;
int nIndex = m_list.GetItemCount();
nIndex = m_list.InsertItem(nIndex, (char*)(LPCTSTR)str);
m_list.SetItemText(nIndex, 1, strSname);
m_list.SetItemText(nIndex, 2, strSsex);
m_list.SetItemText(nIndex, 3, strSbirth);
m_list.SetItemText(nIndex, 4, strSplace);
m_list.SetItemText(nIndex, 5, strSclass);

7,基于对话框的MFC应用程序怎么建立?

使用VC6.0构建最简单的MFC程序

通过这个例子可以加深对MFC的CWinApp和CFrameWnd的了解。

1. 使用应用程序向导产生一个空的“Win32 Application”Project;
2. 添加头文件“StdAfx.h”,内容是 #include
3. 添加源文件“StdAfx.cpp”,内容是 #include "StdAfx.h"
4. 执行Build,会看到LinkError,打开Project|Setting,在General里,选择“Use MFC in Shared DLL”,再次执行Build,一切OK。WinMain内嵌在MFC的链接库里。
5. 按F5调试执行,会出现一个“Unhandled exception …”,通过CallStack可以找到原因:AfxGetThread()和AfxGetApp()返回的都是NULL。需要实现一个全局的CWinApp对象。
6. 添加一个新Class:“class CMyWinApp : public CWinApp”,头文件和源文件分别是Hello.cpp Hello.h,并在Hello.cpp里实例一个全局对象:CMyWinApp theApp。CWinApp只能实例一个对象,在其构造函数里加了ASSERT,防止多次实例。
7. Build之后,再按F5调试执行,程序一闪就结束了,也没有错误。在Output窗口里可以找到一句“Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.”,是因为没有主窗口,所以程序直接退出了。
8. 重载CWinApp::InitInstance,在里面直接m_pMainWnd = new CFrameWnd;是不行的,因为CFrameWnd的构造函数里没有调用Create,窗口不会被创建。
9. 在CMyWinApp::InitInstance()里写入Code:
BOOL CMyWinApp::InitInstance()
{
CFrameWnd *pMainFrame;
pMainFrame = new CFrameWnd;
pMainFrame->Create(NULL, "Hello MFC",
WS_OVERLAPPEDWINDOW, pMainFrame->rectDefault, NULL);

m_pMainWnd = pMainFrame;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();

return TRUE;
}
编译后运行,可以看到一个窗口:

即,可以直接使用MFC的CFrameWnd类实现一个窗口,但是CWinApp不能直接使用,必须派生一个用户类,因为Windows程序的启动顺序是:实例全局对象,WinMain,…,如果不实例CWinApp,找不到机会创建窗口,而派生之后,就可以重载CWinApp::InitInstance函数,AfxWinMain里会调用这个函数。
10. 使用File|New,选择Resource Script,添加一个资源文件,在资源文件里添加一个Menu,在Menu的Property的ID里填上MenuName字串"MainMenu",然后修改InitInstance:
BOOL CMyWinApp::InitInstance()
{
CFrameWnd *pMainFrame;
pMainFrame = new CFrameWnd;
pMainFrame->Create(NULL, "Hello MFC",
WS_OVERLAPPEDWINDOW, pMainFrame->rectDefault, NULL, "MainMenu");

m_pMainWnd = pMainFrame;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();

return TRUE;
}
编译运行后就可以看到菜单了。如果Menu使用的整数ID,使用MAKEINTRESOURCE转换为字符串。

11. 到现在为止,因为直接使用的CFrameWnd,这个程序什么也不能干,要实现用户功能,我们要从CFrameWnd派生一个自己的类CMainFram,我打算在窗口里实现一个字符串从天而降的功能,即重载CFrameWnd::OnPaint函数。
12. 首先给CMainFram加上消息映射表,在类声明里加上DECLARE_MESSAGE_MAP(),在类实现文件里添加
BEGIN_MESSAGE_MAP(CMainFram, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
对于标准的Windows消息,其消息名称和消息函数都是固定的,而且CFrameWnd(或其基类)已经都实现了这些消息响应的虚函数,只要在BEGIN… END… 里写入消息映射描述,就会添加到消息映射表里。
注意,对于CView类来说,ON_WM_PAINT()在文件:C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\ VIEWCORE.CPP的MESSAGE_MAP已经写好了,用户不用写,但对于CFrameWnd来说,必须写出来才能加到消息映射表里。
13. 实现函数OnPaint,就可以沿着Client区域画一个红色的矩形框。
void CMainFram::OnPaint()
{
CPaintDC dc(this);
RECT rect;

CPen *poOldPen;
CPen oNewPen(PS_SOLID, 1, RGB(255,0,0));

poOldPen = dc.SelectObject(&oNewPen);

GetClientRect(&rect);
dc.Rectangle(&rect);
dc.SelectObject(poOldPen);
}

14. 在Resource添加一个简单的对话框,添加一个OnAbout消息响应函数:
void CMainFram::OnAbout()
{
CDialog dlg(IDD_DIALOG_ABOUT, this);
dlg.DoModal();
}
点击Help|About时,就会弹出资源里的对话框,可见对于没有复杂控件的简单对话框,可以直接使用CDialog类,不需要派生。

8,C++中如何判断两个字符串是否相等?

C语言中比较两个字符串是否相等的方法是使用strcmp函数。 它的形式是:strcmp(str1, str2) == 0(成立则两个字符串相等),它需要在编译器开头加上#include头文件。它的作用是接受两个参数,并用前者去减后者。如果为0就是相等。如果负数,前者在ASCLL表的代码比后者小。举例: #include #include int main() { char str1[] = "123456"; char str2[] = "123456"; if (strcmp(str1, str2) == 0) //这一步开始比较两个字符串是否相等。 printf("这两个字符串相等."); else printf("这两个字符串不相等"); return 0; } 输出结果为: 扩展资料:一、函数的实现原理:向strcmp()函数中传入两个字符串(记为str1,str2).传入之后,通过把str1的各字母的ASCII码值和str2的各字母的ASCII码值进行比较。若str1>str2则返回正数,若str1=str2则返回0,否则,则返回负数。 二、函数使用规则: 当s1s2时,返回正数。即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如: "A""A" "computer">"compare" 特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。ANSI标准规定,返回值为正数,负数,0 。而确切数值是依赖不同的C实现的。 参考资料:strcmp函数-百度百科

9,MFC如何获取自己电脑的IP地址和主机名

代码仅供参考: 定义两个字符串变量,并且声明获取计算机名称和IP的函数GetLocalHostIPName(CString &sLocalName, CString &sIpAddress)。 CString m_strLocalIP; //本机计算机IP CString m_strLocalName; //本机计算机名 int GetLocalHostIPName(CString &sLocalName, CString &sIpAddress); //获取本机名称IP定义函数GetHostName(CString &sLocalName, CString &sAddress)。 char name[128];gethostname(name, 128);//获得主机名