沒有win32編程經驗,只有簡單c++基礎。需要速成一個程式出來,希望得到各位大大的指點,如果有什么書能夠快速提高也可以介紹一下。
開發環境vs c++,win32專案。程式有三個功能,1點擊第一個選單選擇目標檔案,2將1.txt中的字串存入陣列,3在目標檔案的每個句號前順序輸入陣列中的每一位。
功能一:如何添加呼叫瀏覽檔案功能(以子函式形式)
借鑒了一下老周的代碼,合成了一下。有個問題hDlg是為宣告識別符號,也不能區域宣告,全域宣告我沒試,感覺也應該不行吧。
#include <Windows.h>
#include "resource.h"
INT_PTR CALLBACK Obj(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK MyWinProce(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
int CALLBACK WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR cmdLine,
int nShow)
{
WCHAR* cn = L"Myapp";
WNDCLASS wc = {};
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = cn;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.hInstance = hInstance;
wc.lpfnWndProc = (WNDPROC)MyWinProce;
RegisterClass(&wc);
HWND hm = CreateWindow(cn,
L"我的應用程式",
WS_OVERLAPPEDWINDOW,
20,
15,
420,
360,
NULL,
// 加載選單資源
LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MAIN)),
hInstance,
NULL);
if (hm == NULL)
return 0;
ShowWindow(hm, nShow);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK MyWinProce(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_COMMAND:
{
// 取出資源Id值
// 并判斷用戶選擇了哪個選單項
switch (LOWORD(wParam))
{
case IDM_OBJ:
Obj(hDlg,msg,wParam,lParam);
break;
default:
break;
}
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
INT_PTR CALLBACK Obj(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
OPENFILENAME opfn;
WCHAR strFilename[MAX_PATH];//存放檔案名
//初始化
ZeroMemory(&opfn, sizeof(OPENFILENAME));
opfn.lStructSize = sizeof(OPENFILENAME);//結構體大小
//設定過濾
opfn.lpstrFilter = L"所有檔案\0*.*\0文本檔案\0*.txt\0MP3檔案\0*.mp3\0";
//默認過濾器索引設為1
opfn.nFilterIndex = 1;
//檔案名的欄位必須先把第一個字符設為 \0
opfn.lpstrFile = strFilename;
opfn.lpstrFile[0] = '\0';
opfn.nMaxFile = sizeof(strFilename);
//設定標志位,檢查目錄或檔案是否存在
opfn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
//opfn.lpstrInitialDir = NULL;
// 顯示對話框讓用戶選擇檔案
if (GetOpenFileName(&opfn))
{
//在文本框中顯示檔案路徑
HWND hEdt = GetDlgItem(hDlg, IDM_TXT);
SendMessage(hEdt, WM_SETTEXT, NULL, (LPARAM)strFilename);
}
return 0;
}
uj5u.com熱心網友回復:
你可以定義成全域變數。uj5u.com熱心網友回復:
windows程式設計第五版uj5u.com熱心網友回復:
從命令列引數里面獲取檔案或檔案夾不行嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/102550.html
標籤:基礎類
下一篇:win32視窗
