鱼C论坛

 找回密码
 立即注册
查看: 8249|回复: 27

[技术交流] VS2010自己DIY的Dialog程序创建流程(非MFC)

[复制链接]
发表于 2011-10-8 01:30:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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部分
#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;
}
源码:
游客,如果您要查看本帖隐藏内容请回复

最后的最后 如有啥问题,请回帖告之。。谢谢各位鱼油。。。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 01:47:52 | 显示全部楼层
新词蛋生了:鱼油!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-8 01:54:49 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-8 02:08 编辑

这还真是我故意打的。。

顺便问下,你的学习方向。。。

明天来看你的回答,睡觉去了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 13:57:01 | 显示全部楼层
唉,不想打击的,,,,,,其实鱼油这个词  在论坛里出来非常久了..............


不过这个还是很好的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-8 13:59:58 | 显示全部楼层
Y.H 发表于 2011-10-8 13:57
唉,不想打击的,,,,,,其实鱼油这个词  在论坛里出来非常久了..............

鱼油貌似是小甲鱼先说的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-11 20:09:06 | 显示全部楼层
好贴,正好需要:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-31 21:11:59 | 显示全部楼层
好贴,正好需要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-6-20 11:20:09 | 显示全部楼层
终于可以回复了  急需代码啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-3 09:43:55 | 显示全部楼层
学习了,感谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-3 17:30:21 | 显示全部楼层
看看,回帖支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-3 21:58:30 | 显示全部楼层
看看支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-3 22:15:05 | 显示全部楼层
灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-4 11:41:53 | 显示全部楼层
再看看,温故知新
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-4 19:59:35 | 显示全部楼层
代码  代码:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-30 19:49:16 | 显示全部楼层
谢谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-10 14:21:45 | 显示全部楼层
谢谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-20 22:19:28 | 显示全部楼层
看一下隐藏的,学习了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-21 01:03:30 | 显示全部楼层
对楼猪只能说,你太伟大了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-21 09:35:27 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-24 22:20:43 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 19:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表