|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 yipwing 于 2011-10-8 01:30 编辑
首先说说,偶第一次发这种帖子,以前都是个潜水族,这个是我自己DIY的。。如果鱼油们喜欢DIY就拿去自己DIY。。如有错漏还请鱼油们指点指点。。
顺带一提,本文写给第一次接触Windows 编程(c/c++)的鱼油们。。SDK写CreateWindow各种不方便有木有?
这里抱歉了,没有图片。。。
打开VS2010
1.新建一个项目并选择Win32选项
2.点击下一步,勾选选择空项目并点击完成
3.打开解决方案管理器 右键-->添加-->新建项-->选择头文件,并为文件取个你喜欢的名字
4.再次新建一个头文件(用作预编译),命名为stdafx.h(MFC生成的也有这个,你也可以复制一个MFC创建Dialog的stdafx.h,然后自己DIY); 关于预编译这里就不说了,自行google..
5.添加targetver.h
6.接下来就是.cpp文件,cpp也可以写C代码的; 命名也是随便取。然后是添加stdafx.cpp
7.最后,添加一个资源。 在资源文件那里右键-->添加-->资源,编译器会自动生成一个resource.h(这里会弹出一个添加资源的小窗口,点击Dialog,然后点击新建按钮);
好了,接下来是写代码了。。
为了方便我把我自己DIY的代码放上来。。附件在最后..
.h(不是预编译头文件)文件里添加几个函数定义和全局变量
- #pragma once
- #include "resource.h"
- bool InitInstances(HINSTANCE hInstance, int nShowCmd); //初始化实例
- bool InitDialogs(HWND hwnd); //初始化Dialog窗口
- LRESULT CALLBACK Evol(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam); //主窗口回调
- // 全局变量:
- HINSTANCE g_hInst; // 当前实例
- HWND g_hMainDlg; // 主窗口句柄
- HANDLE g_hFile; // 主要修改文件
复制代码
stdafx.h部分
- // stdafx.h : 标准系统包含文件的包含文件,
- // 或是经常使用但不常更改的
- // 特定于项目的包含文件
- //
- #pragma once
- #include "targetver.h"
- #define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的信息
- // Windows 头文件:
- #include <windows.h>
- #include <WindowsX.h>
- #include <Commctrl.h> // Windows component
- #include <Shellapi.h> // Windows Shell API
- #include <Tlhelp32.h> // Windows Process API
- #include <shobjidl.h>
- #include <shlobj.h>
- #include <Shlwapi.h>
- // C 运行时头文件
- #include <stdlib.h>
- #include <malloc.h>
- #include <memory.h>
- #include <tchar.h>
- // C++ 运行时文件
- #include <assert.h>
- // VC++ Header Files:
- #include <uxtheme.h>
- //Kernel Function..
- #include <Winternl.h>
- // TODO: 在此处引用程序需要的其他头文件
复制代码
stdafx.cpp部分
targetver.h部分
- #pragma once
- // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
- // 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
- // WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
- #include <SDKDDKVer.h>
复制代码
.cpp代码部分
- // Test.cpp : 定义应用程序的入口点。
- #include "stdafx.h"
- #include "Evol.h"
- #pragma comment(lib,"Comctl32.lib")
- int APIENTRY _tWinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPTSTR lpCmdLine,
- int nCmdShow)
- {
- MSG msg;
- HACCEL hAccelTable;
- if (!InitInstances(hInstance,nCmdShow)) //初始化实例
- {
- return false;
- }
- hAccelTable = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACC)); //载入加速键表
- while (GetMessage(&msg, NULL, 0, 0)) //消息循环
- {
- if (TranslateAccelerator(g_hMainDlg, hAccelTable, &msg)||!IsDialogMessage(g_hMainDlg,&msg)) //消息处理
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- return (int)msg.wParam;
- }
- bool InitInstances(HINSTANCE hInstance, int nShowCmd)
- {
- INITCOMMONCONTROLSEX icex; //某些控件需要,这是一个结构体 │
- icex.dwSize=sizeof(icex); //设置此结构体的大小 │
- icex.dwICC=ICC_INTERNET_CLASSES + ICC_WIN95_CLASSES; //控件使用的样式 │
- InitCommonControlsEx(&icex); //初始化控件类
- g_hInst = hInstance; //传递给全局变量
- g_hMainDlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,(DLGPROC)Evol); //创建Dialog窗口,并把句柄传递给全局变量
- if (g_hMainDlg==NULL)
- {
- return false;
- }
- ////////////////////////////////////////////
- // 这里是只让程序运行一个,方法有好几个,这里用我认为最简单的。
- //
- if (!CreateMutex(NULL,TRUE,L"one")) //创建一个互斥对象
- {
- return false;
- }
- if (GetLastError()==ERROR_ALREADY_EXISTS) //如果已经有一个存在
- {
- ShowWindow(g_hMainDlg,SW_RESTORE);
- SetForegroundWindow(g_hMainDlg);
- return false;
- }
- ////////////////////////////////////////////
- ShowWindow(g_hMainDlg,SW_SHOWNORMAL);
- UpdateWindow(g_hMainDlg);
- return true;
- }
- ////////////////////////////////////////////
- // 主窗口回调
- //
- LRESULT CALLBACK Evol(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- int wmId,wmEvent;
- wmId = LOWORD(wParam);
- wmEvent = HIWORD(wParam);
- switch(uMsg)
- {
- case WM_SYSCOMMAND:
- break;
- case WM_COMMAND:
- break;
- case WM_CLOSE:
- DestroyWindow(hwnd);
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- case WM_INITDIALOG:
- return InitDialogs(hwnd);
- }
- return 0;
- }
- ///////////////////////////////////////////
- // 初始化Dialog窗口
- // 我这里处理的是窗口左上角的小图标
- bool InitDialogs(HWND hwnd)
- {
- HMENU hMenu = GetSystemMenu(hwnd,FALSE); //获得窗口句柄,并赋给HMENU的变量
- if (!hMenu)
- return false;
- HICON hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_TEST), IMAGE_ICON, 0,0, LR_SHARED+LR_DEFAULTSIZE); //载入- -!!不知道怎么说,反正就是载入一个图像
- SendMessage(hwnd,WM_SETICON,ICON_BIG,(LPARAM)hIcon); //发送消息
- SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)hIcon); //同上
- return TRUE;
- }
复制代码 源码:
最后的最后 如有啥问题,请回帖告之。。谢谢各位鱼油。。。
|
|