当前位置:首页 » 编程软件 » vc编程实例

vc编程实例

发布时间: 2022-10-29 12:54:06

⑴ 推荐本C++或者VC++的编程实例教程给我

《C++面向对象程序设计》谭浩强编的,堪称是元老级的。很有用的。o(∩_∩)o...

⑵ 求c语言在vc环境下编程的界面实例

这只是核心代码,实现把一个图片分成9快打乱拼图功能
里面有不少系统自动生成的代码 看你会不会用了
假设你已经会创建Windows项目,我就不多说了
如果要成功运行 你需要准备一个bmp文件,改名为00.bmp 和这个文件放同目录
如果你还不能成功运行 我只能把整个项目打包给你了o(>﹏<)o
如有疑问,email到[email protected] 但不保证能及时回复

// 拼图.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "拼图.h"
#include "time.h"
#define MAX_LOADSTRING 100

// 全局变量:
HINSTANCE hInst; // 当前实例
TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];// 主窗口类名
int bmp[3][3]={0};
HDC hdcBmp;
POINT old={-1,-1};
int num[9]={9,8,7,6,5,4,3,2,1};

// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;

// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MY);

// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;
}

//
// 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
//
// 注释:
//
// 仅当希望在已添加到 Windows 95 的
// “RegisterClassEx”函数之前此代码与 Win32 系统兼容时,
// 才需要此函数及其用法。调用此函数
// 十分重要,这样应用程序就可以获得关联的
// “格式正确的”小图标。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MY);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCTSTR)IDC_MY;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);
}

//
// 函数: InitInstance(HANDLE, int)
//
// 目的: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance; // 将实例句柄存储在全局变量中

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}
void LoadingImage(HDC hdc)
{
HBITMAP hBmp = (HBITMAP)LoadImage(NULL,"00.bmp",IMAGE_BITMAP,300,300,LR_LOADFROMFILE );
hdcBmp = CreateCompatibleDC(hdc);

DeleteObject(SelectObject(hdcBmp,hBmp));

}

void DrawBmp(HDC hdc)
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
BitBlt(hdc,i*100,j*100,100,100,hdcBmp,(bmp[j][i]-1)%3*100,(bmp[j][i]-1)/3*100,SRCCOPY);

}

void random()
{
int i,j;
srand((unsigned)time(NULL));
for(i=0;i<3;i++)
for(j=0;j<3;j++)
while(true)
{
int t=rand()%9;
if (num[t])
{
bmp[j][i]=num[t];
num[t]=0;
break;
}
}
}
//
// 函数: WndProc(HWND, unsigned, WORD, LONG)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent,i,j,x,y,t;
PAINTSTRUCT ps;
HDC hdc;
//HBITMAP hBmp;

switch (message)
{
case WM_CREATE:
random();
hdc = GetDC(hWnd);
LoadingImage(hdc);
ReleaseDC(hWnd,hdc);
break;
case WM_LBUTTONDOWN:
x =LOWORD(lParam)/100;
y =HIWORD(lParam)/100;
if (old.x==-1)
{
old.x=y;
old.y=x;
}
else
{
t=bmp[old.x][old.y];
bmp[old.x][old.y] = bmp[y][x];
bmp[y][x] = t;
old.x=-1;
old.y=-1;
}
hdc=GetDC(hWnd);
DrawBmp(hdc);
ReleaseDC(hWnd,hdc);
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
DrawBmp(hdc);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

// “关于”框的消息处理程序。
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}

⑶ C语言的学习

学习C语言,我想应当首先手头有一本入门教材,如果有条件用计算机的话,在计算机上安装TC程序。
前面的基本内容我想你自己会学好学会的,关键就是在指针以后的内容比较复杂抽象,需要下一番功夫才行呀。
如果有什么问题可以在网上线我留言。QQ360795604

⑷ 用vc++实现usb接口通信编程的一般步骤

我来说下我做过的USB通信,我没有做过DSP跟上位机的通信,我只做过ARM类的STM32跟上位机的数据传递,虽然做过但是也不是很 懂,只是略知一二,我来说说我怎么做的吧,我是这么实现的:
USB是个很复杂的协议,你如果完全搞懂,我估计没有几个月专心钻研是不行的,但是如果只是能实现你的这个功能,我估计不是很复杂。
首先来说说USB通信:
USB通信传输方式分为四种:控制,中断,批量,同步传输四种,这个你可以看看网上资料,然后我用STM32通信,因为数据量不是很大,我用的是中断传输方式,但是DSP数据量应该会比较大,不知道中断传输行不行,但是一般问题不大。
传输方式说完了,再说说USB设备类型,你每次插usb设备到电脑上的时候就会有提示,这是一个什么设备,USB设备类型就是说的这个意思,是鼠标还是键盘还是别的什么的,如果你选用标准的类,你就不用自己写上位机(PC)的驱动程序,但是如果不用标准的类,就是用自定义的类就要自己写上层的设备驱动程序,就是所谓的DDK,WDM,WDF什么的,你没写过这方面的还真有点棘手,但是也不一定要写驱动程序,你可以试试有个类叫HID类,这个类在USB通信的时候用的还挺多的,不过这个类也有缺点,这个地方还要说一点,USB还分低速,全速,高速三种,不太了解DSP,不知道他支持什么模式,但是USB2.0的全速应该至少可以支持的。
USB2.0全速模式HID用中断方式每秒最多可以传输64KB的数据,不知道能不能达到你的要求,但是我估计一般问题不大了,如果你这歀DSP能支持高速模式,每秒用这种方式可以传输高达22MB的数据,这个速度一般问题不大了。
你可以照着我说的思路,去网上搜搜人家写好的程序,肯定有人做过DSP的USB通信,然后你按照自己的要求改一改,主要应该是USB的设备描述符部分要自己修改,然后可能还要根据自己的电路改改配置什么的,上位机软件网上有源代码的多的是,然后自己摸索摸索,我估计你要是编程水平还可以的话,只是摸索USB,一两个星期完全没有问题,祝你好运!

⑸ 谁有数控磨床的VC++编程实例吗

  1. 打开VC++6.0,按左上角菜单栏的“文件”-->“新建”,打开如下界面

  2. ⑹ vc 如何操作 excel2003(注意一定是2003) 编程

    1.制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛的当然是Excel表格,本文简略介绍在VC++6.0中如何使用Excel2003的库函数并对其进行编程。先创建一个对话框工程,命名为VCExcel。在对话框中添加一个按钮,控件ID为2.ID_RUNEXCEL(是不是很搞笑哇,不过没关系,它照样能实现强大的功能)。
    再在该按钮上添加消息BN_CLICKED,其消息映射函数为OnRunexcel(),下面工作就是要完成这个OnRunexcel()函数。在这里我们通过一个实例来说明VC是如何调用Excel2003的接口编程的。
    3.要编程输出一个如下表格。
    格式如下:
    1)表头的字体为宋体,加粗,颜色为白色,底色为深蓝,垂直水平居中对齐;
    2)表中正文内容字体为宋体,颜色为深蓝,底色为灰色,垂直水平居中对齐;
    3)全部边框,文本自动换行。
    在BOOL CVCExcelApp::InitInstance()之中,int nResponse = dlg.DoModal()语句之后加入如下代码:
    if(CoInitialize(NULL)==0)//初始化COM库
    {
    AfxMessageBox("初始化COM失败!");
    exit(1);
    }
    在return FALSE;语句之前加入:::CoUninitialize();//释放COM库。
    4.为了能调用Excel的接口我们打开MFC ClassWizard->Automation->Add Class->From a type library,选择[Excel的安装路径]/EXCEL.exe,然后把所有的类都添加进去,头文件为excel.h,源文件为excel.cpp。当然,你也可以只把一些比较常用的类如_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range加进去,因为网上流传的绝大部分教程都只添加这几个类,这完全根据个人的需要。至少还要用到Interior类(设置底色),Font类(设置字体),而且这样做又简单又方便扩展功能,不管三七二十一全部弄进去吧!但这样做会有一个问题,有可能产生类的名字冲突,例如本来你自己写了一个类叫Font,当你全部添加时又再次加入了Font类,这样就重复定义了,不过可以通过名字空间来解决这个问题。再在VCExcelDlg.cpp文件的头部添加(如果系统已经自动添加就不要重复添加了):
    #include "VCExcel.h"
    #include "comdef.h"
    这样一来程序就可以自由调用EXCEL了,一切准备就绪。
    5.下面先在CVCExcelDlg中添加如下成员变量,用来操控Excel应用程序、工作簿和单元格。
    Range m_ExlRge;
    _Worksheet m_ExlSheet;
    Worksheets m_ExlSheets;
    _Workbook m_ExlBook;
    Workbooks m_ExlBooks;
    _Application m_ExlApp;
    我们利用加载Excel模板来生成要求的表格,在本工程Debug文件夹中建立一个Excel文件,命名为Template.xls。我们的OnRunexcel()代码如下(详见注释):
    void CVCExcelDlg::OnRunexcel()
    {
    // TODO: Add your control notification handler code here

    //用m_ExlApp对象创建Excel2003进程

    if(!m_ExlApp.CreateDispatch("Excel.Application",NULL))
    {
    AfxMessageBox("创建Excel服务失败!");
    return;
    }

    //设置为可见
    m_ExlApp.SetVisible(TRUE);
    ///////////////////下面得到应用程序所在的路径///////////////////
    CString theAppPath,theAppName;
    char Path[MAX_PATH];
    GetMoleFileName(NULL,Path,MAX_PATH);//得到应用程序的全路径
    theAppPath=(CString)Path;
    theAppName=AfxGetApp()->m_pszAppName;
    theAppName+=".exe";
    //把最后的文件名去掉
    int length1,length2;
    length1=theAppPath.GetLength();
    length2=theAppName.GetLength();
    theAppPath.Delete(length1-length2,length2);
    ////////////////////////////////////////////////////////////////
    CString TempPath="";
    TempPath=theAppPath+"Template.xls";//EXCEL模板的路径
    m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);
    m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加载EXCEL模板
    m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加载Sheet页面
    //添加新的Sheet页面
    m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing);
    //删除第二个Sheet页面
    m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);
    m_ExlSheet.Delete();
    //把第一个Sheet页面的名字改变为TestSheet
    m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE);
    m_ExlSheet.SetName("TestSheet");
    ///////合并第一行单元格A1至D1//////
    //加载要合并的单元格 m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")),TRUE);
    m_ExlRge.Merge(_variant_t((long)0));
    ////////设置表格内容////////
    m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//加载所有单元格
    m_ExlRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("数学系研究生课程统计"));

    m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t("课程名"));
    m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t("课时"));
    m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("难度"));
    m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t("教学方式"));
    m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t("泛函分析"));
    m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)2),_variant_t("60"));
    m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)3),_variant_t("普通"));
    m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)4),_variant_t("老师讲课"));

    m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)1),_variant_t("微分流形"));
    m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)2),_variant_t("40"));
    m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)3),_variant_t("变态难"));
    m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)4),_variant_t("自学"));
    m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)1),_variant_t("二阶椭圆型方程与方程组"));
    m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)2),_variant_t("60"));
    m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)3),_variant_t("很难"));
    m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)4),_variant_t("讨论"));
    m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange());//加载已使用的单元格
    m_ExlRge.SetWrapText(_variant_t((long)1));//设置单元格内的文本为自动换行
    //设置齐方式为水平垂直居中
    //水平对齐:默认=1,居中=-4108,左=-4131,右=-4152
    //垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107
    m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4108));
    m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108));
    ///////设置整体的字体、字号及颜色//////
    Font ft;
    ft.AttachDispatch(m_ExlRge.GetFont());
    ft.SetName(_variant_t("宋体"));//字体
    ft.SetColorIndex(_variant_t((long)11));//字的颜色
    ft.SetSize(_variant_t((long)12));//字号
    ///////////设置标题字体及颜色////////// m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")));
    ft.AttachDispatch(m_ExlRge.GetFont());
    ft.SetBold(_variant_t((long)1));//粗体
    ft.SetSize(_variant_t((long)13));
    ft.SetColorIndex(_variant_t((long)2));
    CellFormat cf;
    cf.AttachDispatch(m_ExlRge.GetCells());
    //////////////设置底色/////////////////
    Interior it;
    it.AttachDispatch(m_ExlRge.GetInterior());
    it.SetColorIndex(_variant_t((long)11));//标题底色
    ////表格内容的底色//// m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A2"),_variant_t("D5")));
    it.AttachDispatch(m_ExlRge.GetInterior());
    it.SetColorIndex(_variant_t((long)15));
    //////////////为表格设置边框/////////////
    Range UnitRge;
    CString CellName;
    for(int i=1;i<=4;i++)
    {
    for(int j=1;j<=4;j++)
    {
    CellName.Format("%c%d",j+64,i);//单元格的名称 UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t(CellName),_variant_t(CellName)));//加载单元格
    //LineStyle=线型 Weight=线宽 ColorIndex=线的颜色(-4105为自动) UnitRge.BorderAround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtMissing);//设置边框
    }
    }

    //释放对象(相当重要!)
    m_ExlRge.ReleaseDispatch();
    m_ExlSheet.ReleaseDispatch();
    m_ExlSheets.ReleaseDispatch();
    m_ExlBook.ReleaseDispatch();
    m_ExlBooks.ReleaseDispatch();
    //m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错
    m_ExlApp.ReleaseDispatch();
    //退出程序 m_ExlApp.Quit();
    }

    ⑺ 如何用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 (http://www.vb2themax.com <http://www.vb2themax.com>)的创始人。可通过[email protected]联系到Dino。

    ⑻ 求c语言在vc环境下编程的界面实例

    这只是核心代码,实现把一个图片分成9快打乱拼图功能
    里面有不少系统自动生成的代码
    看你会不会用了
    假设你已经会创建Windows项目,我就不多说了
    如果要成功运行
    你需要准备一个bmp文件,改名为00.bmp
    和这个文件放同目录
    如果你还不能成功运行
    我只能把整个项目打包给你了o(>﹏<)o
    如有疑问,email到[email protected]
    但不保证能及时回复
    //
    拼图.cpp
    :
    定义应用程序的入口点。
    //
    #include
    "stdafx.h"
    #include
    "拼图.h"
    #include
    "time.h"
    #define
    MAX_LOADSTRING
    100
    //
    全局变量:
    HINSTANCE
    hInst;
    //
    当前实例
    TCHAR
    szTitle[MAX_LOADSTRING];
    //
    标题栏文本
    TCHAR
    szWindowClass[MAX_LOADSTRING];//
    主窗口类名
    int
    bmp[3][3]={0};
    HDC
    hdcBmp;
    POINT
    old={-1,-1};
    int
    num[9]={9,8,7,6,5,4,3,2,1};
    //
    此代码模块中包含的函数的前向声明:
    ATOM
    MyRegisterClass(HINSTANCE
    hInstance);
    BOOL
    InitInstance(HINSTANCE,
    int);
    LRESULT
    CALLBACK
    WndProc(HWND,
    UINT,
    WPARAM,
    LPARAM);
    LRESULT
    CALLBACK
    About(HWND,
    UINT,
    WPARAM,
    LPARAM);
    int
    APIENTRY
    _tWinMain(HINSTANCE
    hInstance,
    HINSTANCE
    hPrevInstance,
    LPTSTR
    lpCmdLine,
    int
    nCmdShow)
    {
    //
    TODO:
    在此放置代码。
    MSG
    msg;
    HACCEL
    hAccelTable;
    //
    初始化全局字符串
    LoadString(hInstance,
    IDS_APP_TITLE,
    szTitle,
    MAX_LOADSTRING);
    LoadString(hInstance,
    IDC_MY,
    szWindowClass,
    MAX_LOADSTRING);
    MyRegisterClass(hInstance);
    //
    执行应用程序初始化:
    if
    (!InitInstance
    (hInstance,
    nCmdShow))
    {
    return
    FALSE;
    }
    hAccelTable
    =
    LoadAccelerators(hInstance,
    (LPCTSTR)IDC_MY);
    //
    主消息循环:
    while
    (GetMessage(&msg,
    NULL,
    0,
    0))
    {
    if
    (!TranslateAccelerator(msg.hwnd,
    hAccelTable,
    &msg))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
    return
    (int)
    msg.wParam;
    }
    //
    //
    函数:
    MyRegisterClass()
    //
    //
    目的:
    注册窗口类。
    //
    //
    注释:
    //
    //
    仅当希望在已添加到
    Windows
    95

    //
    “RegisterClassEx”函数之前此代码与
    Win32
    系统兼容时,
    //
    才需要此函数及其用法。调用此函数
    //
    十分重要,这样应用程序就可以获得关联的
    //
    “格式正确的”小图标。
    //
    ATOM
    MyRegisterClass(HINSTANCE
    hInstance)
    {
    WNDCLASSEX
    wcex;
    wcex.cbSize
    =
    sizeof(WNDCLASSEX);
    wcex.style
    =
    CS_HREDRAW
    |
    CS_VREDRAW;
    wcex.lpfnWndProc
    =
    (WNDPROC)WndProc;
    wcex.cbClsExtra
    =
    0;
    wcex.cbWndExtra
    =
    0;
    wcex.hInstance
    =
    hInstance;
    wcex.hIcon
    =
    LoadIcon(hInstance,
    (LPCTSTR)IDI_MY);
    wcex.hCursor
    =
    LoadCursor(NULL,
    IDC_ARROW);
    wcex.hbrBackground
    =
    (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName
    =
    (LPCTSTR)IDC_MY;
    wcex.lpszClassName
    =
    szWindowClass;
    wcex.hIconSm
    =
    LoadIcon(wcex.hInstance,
    (LPCTSTR)IDI_SMALL);
    return
    RegisterClassEx(&wcex);
    }
    //
    //
    函数:
    InitInstance(HANDLE,
    int)
    //
    //
    目的:
    保存实例句柄并创建主窗口
    //
    //
    注释:
    //
    //
    在此函数中,我们在全局变量中保存实例句柄并
    //
    创建和显示主程序窗口。
    //
    BOOL
    InitInstance(HINSTANCE
    hInstance,
    int
    nCmdShow)
    {
    HWND
    hWnd;
    hInst
    =
    hInstance;
    //
    将实例句柄存储在全局变量中
    hWnd
    =
    CreateWindow(szWindowClass,
    szTitle,
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    0,
    CW_USEDEFAULT,
    0,
    NULL,
    NULL,
    hInstance,
    NULL);
    if
    (!hWnd)
    {
    return
    FALSE;
    }
    ShowWindow(hWnd,
    nCmdShow);
    UpdateWindow(hWnd);
    return
    TRUE;
    }
    void
    LoadingImage(HDC
    hdc)
    {
    HBITMAP
    hBmp
    =
    (HBITMAP)LoadImage(NULL,"00.bmp",IMAGE_BITMAP,300,300,LR_LOADFROMFILE
    );
    hdcBmp
    =
    CreateCompatibleDC(hdc);
    DeleteObject(SelectObject(hdcBmp,hBmp));
    }
    void
    DrawBmp(HDC
    hdc)
    {
    for(int
    i=0;i<3;i++)
    for(int
    j=0;j<3;j++)
    BitBlt(hdc,i*100,j*100,100,100,hdcBmp,(bmp[j][i]-1)%3*100,(bmp[j][i]-1)/3*100,SRCCOPY);
    }
    void
    random()
    {
    int
    i,j;
    srand((unsigned)time(NULL));
    for(i=0;i<3;i++)
    for(j=0;j<3;j++)
    while(true)
    {
    int
    t=rand()%9;
    if
    (num[t])
    {
    bmp[j][i]=num[t];
    num[t]=0;
    break;
    }
    }
    }
    //
    //
    函数:
    WndProc(HWND,
    unsigned,
    WORD,
    LONG)
    //
    //
    目的:
    处理主窗口的消息。
    //
    //
    WM_COMMAND
    -
    处理应用程序菜单
    //
    WM_PAINT
    -
    绘制主窗口
    //
    WM_DESTROY
    -
    发送退出消息并返回
    //
    //
    LRESULT
    CALLBACK
    WndProc(HWND
    hWnd,
    UINT
    message,
    WPARAM
    wParam,
    LPARAM
    lParam)
    {
    int
    wmId,
    wmEvent,i,j,x,y,t;
    PAINTSTRUCT
    ps;
    HDC
    hdc;
    //HBITMAP
    hBmp;
    switch
    (message)
    {
    case
    WM_CREATE:
    random();
    hdc
    =
    GetDC(hWnd);
    LoadingImage(hdc);
    ReleaseDC(hWnd,hdc);
    break;
    case
    WM_LBUTTONDOWN:
    x
    =LOWORD(lParam)/100;
    y
    =HIWORD(lParam)/100;
    if
    (old.x==-1)
    {
    old.x=y;
    old.y=x;
    }
    else
    {
    t=bmp[old.x][old.y];
    bmp[old.x][old.y]
    =
    bmp[y][x];
    bmp[y][x]
    =
    t;
    old.x=-1;
    old.y=-1;
    }
    hdc=GetDC(hWnd);
    DrawBmp(hdc);
    ReleaseDC(hWnd,hdc);
    break;
    case
    WM_COMMAND:
    wmId
    =
    LOWORD(wParam);
    wmEvent
    =
    HIWORD(wParam);
    //
    分析菜单选择:
    switch
    (wmId)
    {
    case
    IDM_ABOUT:
    DialogBox(hInst,
    (LPCTSTR)IDD_ABOUTBOX,
    hWnd,
    (DLGPROC)About);
    break;
    case
    IDM_EXIT:
    DestroyWindow(hWnd);
    break;
    default:
    return
    DefWindowProc(hWnd,
    message,
    wParam,
    lParam);
    }
    break;
    case
    WM_PAINT:
    hdc
    =
    BeginPaint(hWnd,
    &ps);
    //
    TODO:
    在此添加任意绘图代码...
    DrawBmp(hdc);
    EndPaint(hWnd,
    &ps);
    break;
    case
    WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return
    DefWindowProc(hWnd,
    message,
    wParam,
    lParam);
    }
    return
    0;
    }
    //
    “关于”框的消息处理程序。
    LRESULT
    CALLBACK
    About(HWND
    hDlg,
    UINT
    message,
    WPARAM
    wParam,
    LPARAM
    lParam)
    {
    switch
    (message)
    {
    case
    WM_INITDIALOG:
    return
    TRUE;
    case
    WM_COMMAND:
    if
    (LOWORD(wParam)
    ==
    IDOK
    ||
    LOWORD(wParam)
    ==
    IDCANCEL)
    {
    EndDialog(hDlg,
    LOWORD(wParam));
    return
    TRUE;
    }
    break;
    }
    return
    FALSE;
    }

    ⑼ 介绍点vc的资源

    大量相关电子书籍

    >>>>中国IT实验室<<<<

    -----------------------------------------------------------

    基础篇
    精通Visual C++图像编程 MFC中文帮助 MFC程序员的WTL指南
    VC6从入门到精通-开发者眼中的VC VC6从入门到精通-附录 MS VC++6.0程序员指南
    VC6从入门到精通-基础篇 VC6从入门到精通-VC与INTERNET Visual C++ 使用指南
    Visual C++知识库 Visual C++ MFC入门教程 Visual C++ 6 参考大全
    跟我学 VISUAL C++ 6.0 Visual C++ 6.0语言参考手册 Visual Lisp开发人员手册
    Visual C++ 从入门到精通 Visual J++ 6.0 WFC 类库手册 Visual InterDev 从入门到精通
    Visual C++ 6.0用户开发手册 VC编程指南 VC++6.0 类库参考手册
    VC++database编程大全 VC6.0 运行库参考手册 Visual C++6.0运行库参考手册
    VC++6.0模板库手册 VC++面向对象入门 VC新手学堂
    Visual C++ 6.0预处理器参考手册 VC5.0开发人员参考手册 VC6中文版程序员开发指南
    Visual J++ 6.0 WFC类库参考手册一 VC6 模板库参考手册 VC++编程指南
    Visual J++ 6.0 WFC类库参考手册二 VC6.0 MFC类库参考手册 VC6从入门到精通-VC与数据库管理
    MS VC++ 6.0 MFC类库参考手册 一 MS VC++ 6.0 MFC类库参考手册 二 走进Visual C++

    实例篇
    Visual C++ 实践与提高-图形图像编程篇 Visual C++ 数字图像处理 VC-MFC编程实例
    Visual C++实践与提高_环境剖析IDE篇 Visual C++程序设计:基础与实例分析 Visual C++ 6.0实例
    Visual C++课程设计案例精编 Visual C++ 6.0开发与实例 VISUAL C++扩展编程实例
    Visual C++6.0高级编程技巧与实例 VC++扩展编程实例 Visual C++编程技巧与范例
    战胜Visual C++必做练习50题 Visual C++6.0编程与实例解析 VC-MFC扩展编程实例
    MFC资源大全 精通Visual C++ 6.0 Visual C++程序模块集锦
    Visual C++_Turbo C串口通信编程 Visual C++ 6.0应用编程150例 Visual C++ 6.0实例教程电子教案

    教程篇
    MFC Windows程序设计 Visual C++网络通信协议分析 VC6.0数据库编程
    Visual C++ 学习教程 Visual_C++_新起点—6.0实用教程 Visual C++ 6-24学时学习教程
    Visual C++ 6.0 21天自学教程 VC++网络教程 Visual C++ MFC 简明教程
    VC 数据库编程三部教学 Visual C++ 6.0 数据库编程大全 VC新手学堂简明教程
    Visual C++ 6.0 开发宝典 Visual C++ 6.0 教程 Visual C++ 6.0 高级编程
    VC++6.0培训教程 Visual J++ 6.0 即学即用 Visual C++与面向对象程序设计教程
    Visual C++6.0高级开发教程 Visual C++.NET 宝典 Visual C++5.0 程序设计

    技术与应用
    VC++6.0 用户界面制作技术与应用实例 深入浅出WINDOWS MFC程序设计 Visual C++ 角色扮演游戏程序
    Visual C++6.0程序设计提高篇 VC++编程资料 VC++ 函数经典
    VC++与Matlab混合编程的快速实现 Visual C++ 5.0易学活用 VISUAL C++ 设计WIN32应用程序
    Visual C++入门与应用 Visual C++6.0开发宝典 Visual C++6.0技术内幕
    VC++6编程方法 深入VC编程内幕 VC编程经验总结
    用VC++编写USB接口通信程序 用VC开发CGI 疯狂VC技巧集
    VC6开发宝典 Visual C++经典 Visual C++ 6 轻松进阶
    VC编程常用捷径 MFC技术内幕 VC深入编程

热点内容
鼠标如何编程 发布:2025-05-16 02:29:09 浏览:815
安卓70能用什么软件 发布:2025-05-16 01:45:09 浏览:480
编程发展史 发布:2025-05-16 01:38:52 浏览:528
android图片气泡 发布:2025-05-16 01:38:40 浏览:886
文件加密编辑器下载 发布:2025-05-16 01:30:41 浏览:343
linuxapacheyum安装 发布:2025-05-16 01:30:31 浏览:476
大连宾利浴池wifi密码是多少 发布:2025-05-16 01:25:36 浏览:172
缓存数据生产服务 发布:2025-05-16 01:08:58 浏览:585
普通电脑服务器图片 发布:2025-05-16 01:04:02 浏览:971
服务器地址和端口如何区分 发布:2025-05-16 01:03:17 浏览:834