MFC开发-销售信息管理系统

一,Windows编程模型

#include<windows.h>

win32程序实现的功能是创建一个窗口,在窗口响应键盘及鼠标消息

1)winmain函数定义

2)创建一个窗口

3)进行消息循环

4)编写窗口过程函数

初步代码:

#include<windows.h>
//6,处理消息(窗口过程)
LRESULT CALLBACK WindowProc(
    HWND hwnd,//消息所属的窗口句柄
    UINT uMsg,//具体消息名称 WM_XXX消息名
    WPARAM wParam,//键盘附加消息
    LPARAM lParam//鼠标附加

) {
    switch (uMsg)
    {
    case WM_CLOSE:
        DestroyWindow(hwnd);//DestroyWindow发送另一个消息WM_DESTROY

        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_LBUTTONDOWN:
    {
        int xPos = LOWORD(lParam);
        int yPos = HIWORD(lParam);
        char buf[1024];
        wsprintf(buf, TEXT("X=%d,Y=%d"), xPos, yPos);
        MessageBox(hwnd, TEXT("SALLY FACE"), TEXT("鼠标左键按下"), MB_OK);
        break; }
    case WM_KEYDOWN://键盘
        MessageBox(hwnd, TEXT("键盘按下"), TEXT("键盘按下"), MB_OK);
        break;
    case WM_PAINT://绘图
    {
        PAINTSTRUCT ps;//绘图结构体
        HDC hdc = BeginPaint(hwnd, &ps);
        TextOut(hdc, 100, 100, TEXT("LORRY"), strlen("LORRY"));
        EndPaint(hwnd, &ps);
    }
    break;
}
    return DefWindowProc(hwnd, uMsg, wParam, lParam);//返回值用默认处理方式
}
int WINAPI WinMain(
    HINSTANCE hInstance,//应用程序句柄   _In_输入参数
    HINSTANCE hPrevInstance,//上一个应用程序句柄,在win32环境下,参数一般为NULL _In_opt_可选输入参数
    LPSTR lpCmdLine, 
    int nShowCmd) //显示命令 最大化,最小化 
{
    //1,设计窗口
    //2,注册窗口
    //3,创建窗口
    //4,显示和更新
    //5,通过循环取消息
    //6,处理消息(窗口过程)
      //1,设计窗口
    WNDCLASS wc;
    wc.cbClsExtra = 0;//类的额外内存
    wc.cbWndExtra = 0;//窗口的额外内存
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景
    wc.hCursor = LoadCursor(NULL, IDC_HAND);//设置光标 如果第一个参数为NULL,代表使用系统提供的光标
    wc.hIcon = LoadIcon(NULL, IDI_ERROR);//图标 如果第一个参数为NULL,代表使用系统提供的光标
    wc.hInstance = hInstance; //应用程序实例句柄 传入window中的形参即可
    wc.lpfnWndProc=WindowProc;//回调函数 窗口过程
    wc.lpszClassName = TEXT("WIN");//指定窗口名称
    wc.lpszMenuName = NULL;//菜单名称
    wc.style = 0;//显示风格 0代表默认风格
    //2,注册窗口
    RegisterClass(&wc);
    //3,创建窗口
    HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    /* lpClassName, 类名
     lpWindowName, 标题名
     dwStyle,WS_OVERLAPPEDWINDOW风格
     x, y, 显示坐标 CW_USEDEFAULT 默认值
     nWidth, 宽高
     nHeight,
     hWndParent, 父窗口NULL
     hMenu, 菜单NULL
     hInstance,实例句柄
     lpParam 附加值NULL*/
     //4,显示和更新
    ShowWindow(hwnd, SW_SHOWNORMAL);
    UpdateWindow(hwnd);
    MSG msg;
    //HWND        hwnd;主窗口句柄
    //UINT        message;具体消息名称
    //WPARAM      wParam;附加消息 键盘消息
    //LPARAM      lParam;附加消息 鼠标消息
    //DWORD       time;消息产生时间
    //POINT       pt;x y
    while (1)
    {
        /*_Out_ LPMSG lpMsg,消息
            _In_opt_ HWND hWnd,捕获窗口,填NULL捕获所有窗口
            _In_ UINT wMsgFilterMin,最小和最大的过滤消息 一般为0
            _In_ UINT wMsgFilterMax填0表示捕获所有消息*/
        if (GetMessage(&msg, NULL, 0, 0) == FALSE)
        {
            break;
        }
        //翻译消息
        TranslateMessage(&msg);
        //不为false分发消息
        DispatchMessage(&msg);
    }

    return 0;
}

效果图:

 

 二,用mfc创建窗口

1,mfc头文件afxwin.h

2,自定义类 继承与CWINAPP应用程序类MyApp app应用程序对象,有且仅有一个

3,程序如果 Initstance

4,入口里创建窗口

5,窗口类MyFrame构造中CFrameWnd

6,MyFrame构造中Create(NULL,标题名称)

7,创建窗口对象

8,显示和更新

9,m_pMainWnd=frame;//保存指向应用程序的主窗口的指针

10,return TRUE

11,对项目进行配置 在共享DLL中使用MFC

#include"mfc.h"
MyApp app;//全局应用程序对象,有且仅有一个
BOOL MyApp::InitInstance()
{
	//创建窗口
	MyFrame* frame = new MyFrame;
	frame->ShowWindow(SW_SHOWNORMAL);
	frame->UpdateWindow();
	m_pMainWnd = frame;//保存指向应用程序的主窗口指针
	return TRUE;//返回正常初始化

}
MyFrame::MyFrame()
{
	Create(NULL, TEXT("mfc"));
}

#include<afxwin.h>
class MyApp :public CWinApp {//CWinApp应用程序
public:
	//程序入口
	virtual BOOL InitInstance();
};
class MyFranme :public CFramcWnd//窗口框架类
{
public:
	MyFranme; ();
};

三,消息映射机制

1,声明宏 写到.h中

2,分界宏 写到.cpp中

3,找消息宏写到 分界宏中间

4,把函数原名声明写到.h中

5,函数的实现写到.cpp中

6,鼠标,键盘,绘图

#include"mfc.h"
MyApp app;//全局应用程序对象,有且仅有一个
BOOL MyApp::InitInstance()
{
	//创建窗口
	MyFrame* frame = new MyFrame;
	frame->ShowWindow(SW_SHOWNORMAL);
	frame->UpdateWindow();
	m_pMainWnd = frame;//保存指向应用程序的主窗口指针
	return TRUE;//返回正常初始化

}
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
	ON_WM_LBUTTONDOWN()//鼠标左键按下
	ON_WM_CHAR()//键盘按下
	ON_WM_PAINT()//绘图
END_MESSAGE_MAP()


MyFrame::MyFrame()
{
	Create(NULL, TEXT("mfc"));
}
void MyFrame::OnLButtonDown(UINT, CPoint point) {
	/*TCHAR buf[1024];
	wsprintf(buf, TEXT("x=%d,y=%d"), point.x, point.y);
	MessageBox(buf);*/
	//mfc中的字符串 CString

	CString str;
	str.Format(TEXT("x=%d!!!!!!!!!y=%d"), point.x, point.y);
	MessageBox(str);
}
void MyFrame::OnChar(UINT key, UINT, UINT)
{
	CString str;
	str.Format(TEXT("按下了%c键"), key);
	MessageBox(str);
}
void MyFrame::OnPaint()
{
	CPaintDC dc(this);
	dc.TextOutW(100, 100, TEXT("Sally Face"));
	dc.Ellipse(200,200,500, 0);

	//画图


}
#include<afxwin.h>
class MyApp :public CWinApp {//CWinApp应用程序
public:
	//程序入口
	virtual BOOL InitInstance();
};
class MyFrame :public CFrameWnd//窗口框架类
{
public:
	MyFrame();
	DECLARE_MESSAGE_MAP();//声明宏
	afx_msg void OnLButtonDown(UINT, CPoint);
	afx_msg void OnChar(UINT, UINT, UINT);
	afx_msg void OnPaint();
};

三,windows字符集

1,多字节字符串转宽字节

2,声明宽字节字符创wchar

3,统计宽字节字符串wcslen

4,TEXT做了自适应编码转换

5,char*CString 之间转换

四,利用向导创建mfc

1,view视类 相片 MainFrame类相框

2,Oncreate Create WM_Create练习

3,OnDraw OnPaint 如果同时存在 OPaint会覆盖OnDraw 

五,基于对话框学习控件

1,对话框 模态非模态

2 ,按钮 两个captain修改内容 直接输入内容

3,点击触发事件 右侧属性的闪电图标:右键按钮 添加事件处理程序 双击按钮

4,插入窗口 窗口右键 添加类

5,模态窗口创建 CSlgExec dlg                   dlg.DoModal()

6,非模态创建   CDlgShow dlg 写到.h做成员----------》dlg.Create 写到初始化oninitDialog 保证只创建一次----------------------》dlg.showWindow()

六,CStaticText静态文本

1,添加变量 以static为结尾的ID是不可以添加变量 需要修改ID

2,设置内容 setWindowTextW

3,获取内容 getWindowTextW按钮也一样

4,利用静态文本显示图片

要求 bmp文件 宏定义:

5,如何禁用按钮 EnableWindow(FALSE)禁用

七,编辑框的使用

1,EditCtrl属性

mutiline多行     want return 滚动条 无限横向 纵向的输入

getWindowText setWindowText 设置和获取值

2,默认的bug单行点击回车就退出

3,退出当前对话框   CDlalog::OnOk()   OnCancel()

4,添加变量选择 value

本身关联的变量就是那个值

UpdataData(True)

将控件内容同步到变量中

八,下拉框的使用

常用设置:

属性中加入数据data用英文格式的;经行分割

默认排序 修改Flse不排序

类型DropList不可以编辑

添加AddString

删除DeleteString

插入InsertString

设置默认选项 SetCurSel

获取当前按索引GetCurSel

根据索引获取内容GetLBText(索引,String str)

控件事件::OnCbnSelchangeCombo1

九,列表控件

view 报表模式Report

添加表头 InsertCol

添加正文从0索引

添加第一行第一列Insertitem(0,“张三”);

添加第一行其他列 setitem(行,列,具体内容)

设置风格 整行选中 网格显示

m_list.SetExtendedStyle(m_list.GetExtendedStyle()I LVS_EX_FULLROWSELECTl LVS_EX_GRIDLINES);

十,CTreeCtrl树控件

1设置属性:设置线按钮

2设置图片集合:

setimageList(CImageList*lis,正常显示时的宏)

list准备 create(30,30,32位色,4,4)

add(HICON)

添加节点:

Insertitem(节点名称,显示图片,选中后显示的图,父节点)

设置默认节点   selectitiem

节点间切换 触发事件 OnTvnSelchangedTreel

获取当前项 item=getSelectItem

CString str=getItemText(item)

十一,CTabCtrl标签页的使用

1,引用TabSheet.h.cpp添加到项目中

2,拖入控件 tab ctrl

3,添加变量类型 TabSheet类型

4,创建两个标签页 属性broder改为none stylde改为child

5,标签页添加类

主窗口中添加 标签 m_tab.AddPage(TEXT("系统设置"),&dlg1,IDD_DIALOG1)

6,调用show方法展示出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值