vc界面編程
A. VC++6.0編程時,怎樣用自己設計的軟體界面
方法:在新建工程的時候選擇MFC應用程序(不要選MFC DLL),然後在資源管理器,就能看到界面了。你可以看到一個主窗口,這就是你自己程序的界面。
在這個界面按CTRL + X可以調出工具箱,可以把自己喜歡的按鈕啦什麼的加上去。
同樣是這個界面,按CTRL + ENTER 可以調出屬性框,可以更改窗口的風格、大小、樣式、標題、背景等等等等。
如果想得到更加美麗的界面,可以深入學習MFC編程(相對形象化)或者Windows GDI(相對更底層,直接使用Windows介面)。
如果想做出現代風格的界面(例如360安全衛士主界面或者Office 2007以上版本的界面),就請安裝更新版本的VC++ , 例如包含在Visual Studio 2010 中的 VC++2010,使用Ribbon界面。
祝你學習愉快^_^
B. 在VC++界面編程里怎樣在一個菜單項下添加一個對話框
1..添加一個對話框類。例如:CMaxDialog
2..在菜單類的源文件中調用該對話框類的引用#include
"MaxDialog.h"
3..在菜單項的消息響應函數中
CMaxDialog
dlg;
if(dlg.DoModal())
{
//代碼....
}
C. vc界面設計
tab屬性頁控制項可以在一個窗口中添加不同的頁面,然後在頁選擇發生改變時得到通知。MFC中使用CTabCtrl類來封裝屬性頁控制項的各種操作。通過調用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );創建一個窗口,dwStyle中可以使用以下一些屬性頁控制項的專用風格:
TCS_BUTTONS 使用按鈕來表示頁選擇位置
TCS_MULTILINE 分行顯示頁選擇位置
TCS_SINGLELINE 只使用一行顯示頁選擇位置
在控制項創建後必需向其中添加頁面才可以使用,添加頁面的函數為:
BOOL InsertItem( int nItem, LPCTSTR lpszItem );nItem為位置,從零開始,lpszItem為頁選擇位置上顯示的文字。如果你希望在頁選擇位置處顯示一個圖標,你可以調用BOOL InsertItem( int nItem, LPCTSTR lpszItem, int nImage );nImage指明所使用的圖片位置。(在此之前必須調用CImageList * SetImageList( CImageList * pImageList );設置正確的ImageList)
此外CTabCtrl還提供了一些函數用於得到/修改控制項的狀態。
int GetCurSel( )/int SetCurSel( int nItem );用於得到/設置當前被選中的頁位置。
BOOL DeleteItem( int nItem )/BOOL DeleteAllItems( );用於刪除指定/所有頁面。
void RemoveImage( int nImage );用於刪除某頁選擇位置上的圖標。
屬性頁控制項的消息映射同樣使用ON_NOTIFY宏,形式如同:ON_NOTIFY( wNotifyCode, id, memberFxn ),wNotifyCode為通知代碼,id為產生該消息的窗口ID,memberFxn為處理函數,函數的原型如同void OnXXXTab(NMHDR* pNMHDR, LRESULT* pResult),其中pNMHDR為一數據結構,在具體使用時需要轉換成其他類型的結構。對於列表控制項可能取值和對應的數據結構為:
TCN_SELCHANGE 在當前頁改變後發送,所用結構:NMHDR
TCN_SELCHANGING 在當前頁改變時發送可以通過返回TRUE來禁止頁面的改變,所用結構:NMHDR
一般來講在當前頁發生改變時需要隱藏當前的一些子窗口,並顯示其它的子窗口。下面的偽代碼演示了如何使用屬性頁控制項:
CParentWnd::OnCreate(...)
{
m_tab.Create(...);
m_tab.InsertItem(0,"Option 1");
m_tab.InsertItem(1,"Option 2");
Create a edit box as the m_tab's Child
Create a static box as the m_tab's Child
edit_box.ShowWindow(SW_SHOW); // edit box在屬性頁的第一頁
static_box.ShowWindow(SW_HIDE); // static box在屬性頁的第二頁
}
void CParentWnd::OnSelectChangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{//處理頁選擇改變後的消息
if(m_tab.GetCurSel()==0)
{//根據當前頁顯示/隱藏不同的子窗口
edit_box.ShowWindow(SW_SHOW);
static_box.ShowWindow(SW_HIDE);
}
else
{//
edit_box.ShowWindow(SW_HIDE);
static_box.ShowWindow(SW_SHOW);
}
}
D. 用VC++怎麼做圖形界面的軟體
以下程序在VisualC++6.0測試通過,能夠出現一個正規的Windows窗口
#pragma comment(linker,"/SUBSYSTEM:Windows /ENTRY:mainCRTStartup")
#include <windows.h>
/* 使類名成為全局變數 */
TCHAR szClassName[ ] = TEXT("WindowsApp");
/* 這個函數由Windows內部函數DispatchMessage()調用 */
LRESULT CALLBACK WindowProcere (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message) /* 處理信息 */
{
case WM_DESTROY:
PostQuitMessage (0); /* 發送WM_QUIT到消息隊列 */
break;
case WM_PAINT:
hdc = BeginPaint (hWnd, &ps) ;
GetClientRect (hWnd, &rect) ;
DrawText (hdc, TEXT("Hello, Windows NT!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
EndPaint (hWnd, &ps) ;
break ;
default: /* 不處理的消息 */
return DefWindowProc (hWnd, message, wParam, lParam);
}
return 0;
}
/* 下面是主函數 */
int main ( void )
{
HINSTANCE hThisInstance = GetMoleHandle(NULL) ;
int nFunsterStil = SW_SHOW ;
HWND hWnd; /* 這是窗口的句柄 */
MSG messages;/* 應用程序的消息保存在這里 */
WNDCLASSEX wincl;/* 窗口類的數據結構 */
/* 窗口結構 */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcere;/* 這個函數由Windows操作系統調用 */
wincl.style = CS_DBLCLKS; /* 獲取雙擊指令 */
wincl.cbSize = sizeof (WNDCLASSEX);
/* 使用默認圖標和滑鼠指針 */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* 沒有菜單 */
wincl.cbClsExtra = 0;/* 窗口類後面沒有多餘的位元組 */
wincl.cbWndExtra = 0;/* 結構或者窗口實例 */
/* 使用窗口的默認顏色作為窗口的背景色 */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/* 注冊窗口類。如果注冊失敗,那麼就退出程序 */
if (!RegisterClassEx (&wincl))
return 0;
/* 窗口類已被注冊。創建它的程序 */
hWnd = CreateWindowEx (
0,
szClassName, /* 類名 */
TEXT("Windows App"), /* 窗口標題欄的文字 */
WS_OVERLAPPEDWINDOW, /* 默認窗口 */
CW_USEDEFAULT, /* 窗口左上角的位置 */
CW_USEDEFAULT, /* 窗口右下角的位置 */
544, /* 窗口寬度(以「像素」位單位) */
375, /* 窗口高度(以「像素」位單位) */
HWND_DESKTOP,/* 窗口是桌面的子窗口 */
NULL,/* 該窗口無菜單 */
hThisInstance, /* 程序實例的句柄 */
NULL /* 沒有窗口創建的數據 */
);
/* 顯示窗口 */
ShowWindow (hWnd, nFunsterStil);
/* 重繪窗口 */
UpdateWindow(hWnd);
/* 運行消息循環。循環到GetMessage()函數返回0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* 把虛擬信息翻譯成字元信息 */
TranslateMessage(&messages);
/* 發送信息到窗口過程 */
DispatchMessage(&messages);
}
/* 返回PostQuitMessage()函數的返回值 */
return messages.wParam;
}
運行結果如下:

E. 怎麼用VC++編程完成計算機聯鎖站場圖形界面顯示
打開VC++6.0,界面如下,按左上角菜單欄的「文件」-->「新建」,打開如下界面在左邊的列表中選擇「Win32ConsoleApplication」,即win32控制台工程,控制台就類似windows中的cmd窗口,剛開始編程,選擇創建這個工程就可以了。在右邊輸入工程名稱,我在這里輸入「FirstProgram」,位置選擇一個存放該工程的文件夾,如果不放在默認的路徑下,則點擊右邊的那個顯示為「」的按鈕,然後自定義選擇路徑,我選擇的路徑是F:\Cpp。然後點擊確定,在接下來出現的對話框中選擇「一個空工程」,點擊完成即可,在後續的出現的窗口中點擊「確定」。這個時候一個空工程就創建完成了,我們的源代碼文件將包含在這個工程中。我們現在開始創建源代碼文件,點擊軟體左上角的「文件」-->「新建」,然後出現剛才見到過的對話框,先選擇上面標簽中的「文件」,然後再選擇下面列表中的「C++SourceFile」,文件名輸入hello.cpp,然後點擊「確定」。確定完後,右邊的編輯區就會自動打開空白的hello.cpp文件,左邊的工作區也可以看到整個工程的組織結構接下來我們寫一個簡單的程序,在屏幕上顯示「helloworld!」,最經典的程序#includeusingnamespacestd;intmain(){cout<<"helloworld!\n";return0;}然後按編輯區上方的按鈕進行編譯、鏈接,然後執行,執行結果如下圖所示,我們用vc++6.0寫的一個小程序就執行成功了
F. vc++中MFC界面編程問題
編輯框可以這樣做,沒問題。
CStringstr;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);//這就取得了編輯框的內容
關鍵是你的漢字和英文,與十六進制是怎麼轉換的,這個是演算法問題。
G. VC++中 MFC 和 界面編程
首先windows創建窗口等界面一般都利用提供的api也就是放在系統動態連接庫dll中的函數,
也就相當於windows的庫函數,不過這種編程方式要做的工作實在太多,所以微軟開發了mfc基礎類庫
把大部分api包裝到了類裡面,以便使用.雖然也有其他的類庫,在vc還是用mfc編程的比較廣泛
而vs.net和之後的版本 都已經有了開發窗體應用程序的方法 這和以前vb6\delphi\c++builder等等
一樣的窗體開發模式,建立圖形界面比以前更方便還可以利用更多的功能
H. 求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;
}
I. VC界面編程
用srand(rand())播種
用rand()獲得隨機數
假如你要顯示在CEDIT框內,將這個控制項關聯一個變數如:m_num(int型)
按鈕的觸發下面的
{
srand(rand());
m_num=rand()%x+y;//隨機數的范圍為[y,x+y-1]
UpdateData(FALSE);
}
