伍佳丽中国好声音_在VC++6.0中怎么进行API编程。。。急!!!

2020-07-31

在VC++6.0中怎么进行API编程。。。急!!!


文件-新建-文件-c++ source file,勾面的添加到工程-,好可以添加代码了。在添加自己的代,先在开头写上#include//(包含头文件),然后再写你自己的代码,然后按f5就可以运行了。或者把下面的代码直接复制到里面,按f5。师傅领进门,修行在个人,剩下的要你自己慢慢研究了。
#include

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0);

return 0 ;

}HeaderFile 可以包含在C++ Source File中,也可以分开写。Resource File是当你添加资源时,如对话框,菜单时用。以上步骤正接下来点下:新建(出现新建对话框)C++ Source File ——填写文件名——确定。
第一次建一个工程,工程建完后再建立文件,这样才能有一个完整的C++ 文件.
然后再添加代码就可以了!Source File 就可以了
如何用vc编写程序


为Non-COM程序添加对象模型(2)

初始化对象模型

创建一个新的组件实例,Load方法来获对结果。首先,连接到记事本运行中的拷贝。其次,在记事本窗口中打开一个已存在的文档或创个空文档。

与记事本相结合,需要夺取主窗体的句柄和覆盖了整个客户端区域的编辑控件的句柄。可以用C++ FindWindow API函数检索第一个打开的并且和记事本的Windows类名“notepad”相匹配的窗口(此后台信息已经可以由Spy++提供,它是一个Visual Studio工具,可以透视Windows的隐私),可以使用以下的C++代码:

STDMETHODIMP

CNotepadApplication::Load(BSTR bstrFile)

{

m_hwnd = FindWindow(_T("notepad"), NULL);

if (!IsWindow(m_hwnd))

_StartApp(OLE2T(bstrFile));

Load方法尝试找到一个运行中的记事本实例。如果成功,它忽略输入的文件名。否则,它产生nodepad.exe,并用命令行传递bstrFile参数。

这是仅有的可能的方法来做到这些了。可以更改Load方法的行为遵守其他的规则。然而,需要注意的是,在程序的用户接口中隐蔽地加载一个文本文件是通过命令行来实现的。否则,必须求助File菜单中的Open命令,但这就不是自动和隐蔽的了。

一旦找到了记事本主窗体的句柄,就可以利用它并使用C++代码检索子编辑控件。

m_hwndEdit = FindWindowEx(

m_hwnd, NULL, _T("edit"), NULL);

记事本的结构提供了一个类名为“notepad”的窗口,它的客户区域被一个编辑控件占据——一个类名为“edit”的窗口。FindWindowsEx API函数检索第一个类名为“edit”的窗口,它是m_hwnd的子女。

下一步,在COM对象中创建一个属性,它描述子编辑控件的内容。调用名为Text的可读写属性。给它一个文本内容,它将会立即影响到记事本的缓冲区。

Set npad = CreateObject("NotepadOM.Application")

npad.Load ""

npad.Text = "Sample text"

在前面的代码中,我们建立了一个新的未明名的文本文档,它的内容已经被赋予了某个字符串。当然,可以使用Text属性连接文本到其他变量中。

npad.Text = "Sample text"

npad.Text = npad.Text & vbCrLf & "for the article"

即使记事本是个SDI程序,也可能需要像清晰的对象调用过程那样公开文本内容,例如文档操作。这符合更清楚、更雅致的模型设计,但是它仍需要为架构设计带来多余的复杂性。为什么创建一个新的ATL对象仅仅是为了优化一些文本相关的功能呢?

在实现Text属性时,利用了Windows32编辑控件的一个鲜为人知的特性。所有Windows32控件不能跨进程访问。例如,不能请求另一个应用程序的rich edit box以字符串类型返回它的内容。产生这个问题的原因是,任何内存地址只在进程管理范围内才有效。这个规则有少部分例外。

所有的Windows标准控件buttons、listboxes、和edit controls或者其他控件都不违背这项规则。它们的内容以在进程间被任意地读或写。这功能在Windows 95时为了保持向后兼容现存的Windows3x程序就出现了,它用进程间子类化。此同样存在于Windows XP和Windows 2000中。

可以使用一些消息,如WM_GETTEXT和WM_SETTEXT来获得或写入文本框的内容而不顾实际进程的相关情况。同样,当运行VBS脚本时,实际上已涉及到两个不同的进程,记事本和wscript.exe,它们控制着VBS脚本。用C++实现此Text属性,代码如下:

STDMETHODIMP

CNotepadApplication::get_Text(BSTR *pVal)

{

USES_CONVERSION;

int nLen = 1 + SendMessage(m_hwndEdit, WM_GETTEXTLENGTH, 0, 0);

LPTSTR pszBuf = new TCHAR[nLen];

SendMessage(m_hwndEdit, WM_GETTEXT, nLen, (LPARAM) pszBuf);

*pVal = SysAllocString(T2OLE(pszBuf));

delete [] pszBuf;

return S_OK;

}

STDMETHODIMP

CNotepadApplication::put_Text(BSTR newVal)

{

USES_CONVERSION;

SendMessage(m_hwndEdit, WM_SETTEXT, 0, (LPARAM) OLE2T(newVal));

return S_OK;

}

添加编辑函数

访问编辑控件的句柄可以弄清编辑所需的一串函数——特别是关于文本选择的部分。可以很容易地添加方法选择所有的缓冲区中的文本或限制为某个区域选择。SelectAll和SelectText用C++实现,方法如下:

STDMETHODIMP

CNotepadApplication::SelectText(

int nFrom, int nTo) {

SendMessage(m_hwndEdit, EM_SETSEL, nFrom-1, nTo-1);

return S_OK;

}

通过EM_SETSET消息可以很容易地在编辑控件中实现文本选择。在Windows32中,第一个可选的字符是在0位置,但是相关方法使它从1开始。而指定-1~0的范围可以选择整个文本。

编辑框中正文的字体名称由某个注册值lfFaceName决定,在以下位置可以找到此键值:

HKEY_CURRENT_USER

\Software

\Microsoft

\Notepad

将它设为想要用的键值。记事本在启动之前读取这个设置。为了使它生效,请记住在调用Load之前设置好它。

set npad = CreateObject("NotepadOM.Application")

npad.Font = "Lucida Console"

npad.Load "readme.txt"

当一个交互式的用户单击菜单时,例如“File | Open”,主窗体发送WM_COMMAND消息,其中WPARAM参数被赋予串联的两个字。低位字是命令的ID,高位字包含消息码或表示触发的值——键盘加速键或菜单。用C++调用一个菜单命令、发送一个WM_COMMAND消息到记事本,代码如下:

SendMessage(m_hwnd, WM_COMMAND,

MAKELONG(nCommand,0), 0);

必须用特殊的工具为nCommand参数指出正确的值,就像Spy++。既然这样,我稍微修改文章中所描述的DLL版本。“Hook,Line and Sinker”〔Visual C++ Developers Journal February 2001〕。此例程产生并钩住,然后创建记事本的子类。它过滤窗口接收到的所有消息,并在命令代码是WM_COMMAND时弹出对话框显示command ID。

if (uiMsg == WM_COMMAND) {

// Get the value of LOWORD(wParam)

}

需要添加的仅仅是存储或显示命令代码的程序。检验主记事本的菜单命令ID。只要给出了这个,调用菜单命令就很简单了,代码如下:

const NOTEPAD_FILE_OPEN = 10

Set npad = CreateObject("NotepadOM.Application")

npad.InvokeMenu NOTEPAD_FILE_OPEN

如果要编程关闭运行中的实例,需要想到在记事本窗口上调用DestroyWindows。然而,DestroyWindows只能在属于同一进程的窗口的进程中调用。要卸载记事本,用C++简单的发送一条退出代码的WM_COMMAND消息:

SendMessage(m_hwnd, WM_COMMAND,

MAKELONG(28,0), 0);

有些功能是无法从非自动化的程序中获得的。例如,打开文件和另存为是不可能实现的,因为程序并不通过消息或API暴露这些代码,需要编写代码来存储它。举个例子来说,在记事本中,存储运行时结果需要响应Save或Save As命令,但是它们都是交互式的命令,需要用户单击OK按钮或输入一个新的文件名。这是原解决方案固有的限制。

最近,在一个客户中碰到一个相似的问题,我应要求在不同环境处理一些传统的Windows程序(其中一个是记事本)。本质上来说,Win32 made-to-measure应用程序获得TCP/IP通道指令并转换它们以执行本地的Windows应用程序。通过Windows32消息请求服务的方式和在此所做的很相似。下一目标是用COM对象模型封装此通信模式。

关于作者

Dino Esposito是Wintellect的ADO.NET专家和培训师并且在罗马当咨询师。Dino是《Building Web Solutions With ASP.NET and ADO.NET》(微软出版)一书的作者,是VB-2-The-Max (/www.vb2themax.com>)的创始人。可通过dinoe@wintellect.com联系到Dino。

book/chapter.php?id=48&volume=1&chapter=8


STM32单片机做个USB和计算机VC编程软件通信,麻烦高手给个样例,非常感谢!
最简单的方法是用STM32用CDC类,把USB做成虚拟串口。VC端用串口编程。这样的例子很多,你可以去找安富莱Armfly的例子,它的软件编程比较规范,值得学习。搞得好的好感动是十分
我该怎么学会VC++编程????
学好c基础,然后多读人家的优质代码。在论坛上多看人家的问题和回答。学习编程一定要注重算法,养成良好的思维能力。一个人学得累得话可以下些视频教程或报个培训班系统学习一下。C++语言 我个人认为还是看国外教材比较好,比典的:
C++语言: C++ Primer Plus 中文版
这是备评.

你也百度一下, 80X86汇编小站网站里面有篇文章是写给C/C++语言初学者的.标题是:
如何正确的入门Windows系统下C/C++学习领域.

这文章准确的说明了学习C/C++的各种细节,你也可以通过这篇文章联系作者,跟他交流更多的编程问题。我个人觉得学习C++的语法看懂后看看孙鑫的视频,照着里视频程序练练,理解下里面的例程实现机制,你不可能系统的去学习MFC,那样很慢的,你只有在自己所编的程序中去慢慢体会他的精华和实现方法,换句话说你得在经验中学习进步。再说你是研究生,编个串口程序也不是很难吧,网上例子多的是,你也可以借本编串口程序的书试试,看懂后理解理解,不会的地方百度搜一下,或者发帖子问问。多看多练多问
动手动脑
还要会运用工具
如学习工具、解决问题的工具如果你的英语足够好的话,还是去学一手的吧。国内翻过来的良莠不齐。