VS2010自己DIY的Dialog程序创建流程(非MFC)
本帖最后由 yipwing 于 2011-10-8 01:30 编辑首先说说,偶第一次发这种帖子,以前都是个潜水族,这个是我自己DIY的。。如果鱼油们喜欢DIY就拿去自己DIY。。如有错漏还请鱼油们指点指点。。
顺带一提,本文写给第一次接触Windows 编程(c/c++)的鱼油们。。SDK写CreateWindow各种不方便有木有?
这里抱歉了,没有图片。。。{:5_96:}
打开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部分
#include "stdafx.h"
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;
}
源码:**** Hidden Message *****
最后的最后 如有啥问题,请回帖告之。。谢谢各位鱼油。。。
新词蛋生了:鱼油! 本帖最后由 yipwing 于 2011-10-8 02:08 编辑
ZPCG 发表于 2011-10-8 01:47 static/image/common/back.gif
新词蛋生了:鱼油!
这还真是我故意打的。。{:5_109:}
顺便问下,你的学习方向。。。
明天来看你的回答,睡觉去了。。
唉,不想打击的,,,,,,其实鱼油这个词在论坛里出来非常久了..............
不过这个还是很好的! Y.H 发表于 2011-10-8 13:57 static/image/common/back.gif
唉,不想打击的,,,,,,其实鱼油这个词在论坛里出来非常久了..............
鱼油貌似是小甲鱼先说的。。{:5_109:}
好贴,正好需要:lol 好贴,正好需要 终于可以回复了急需代码啊 学习了,感谢楼主 看看,回帖支持下 看看支持下 灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌 再看看,温故知新 代码代码:lol: 谢谢楼主 谢谢楼主 看一下隐藏的,学习了~ 对楼猪只能说,你太伟大了!!
看看 学习学习
页:
[1]
2